大数据技术栈概貌

article/2025/9/19 5:47:31

一、大数据技术栈概貌

在这里插入图片描述

  • pig:要使用 Apache Pig 分析数据,程序员需要使用Pig Latin语言编写脚本。所有这些脚本都在内部转换为Map和Reduce任务。
  • sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。导入数据:MySQL,Oracle导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统,导出数据:从 Hadoop 的文件系统中导出数据到关系数据库mysql 等
  • Flume美[fluːm]作为 cloudera开发,是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。
  • Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。
  • Kudu美[ˈkuːduː]是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力
  • Alluxio是一个开源的基于内存的分布式存储系统,
  • Impala是Cloudera公司推出,基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
  • Flink弗林克;是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。

1.1 Hadoop生态

在这里插入图片描述

  • HDFS:Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
  • MapReduce:并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
  • Apache HBase:分布式NoSQL列数据库,类似谷歌公司BigTable。
  • Apache
    Hive:构建于hadoop之上的数据仓库,通过一种类SQL语言HiveQL为用户提供数据的归纳、查询和分析等功能。Hive最初由Facebook贡献。
  • Apache Mahout:美[məˈhaʊt]机器学习算法软件包。
  • Apache Sqoop:结构化数据(如关系数据库)与Apache Hadoop之间的数据转换工具。
  • Apache ZooKeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。
  • Hadoop YARN: 一个新的MapReduce框架,任务调度与资源管理

二、hadoop工作流程简介

2.1 简单案例

在这里插入图片描述

  • 当读取的文件的大小超过内存的大小时,一个map的方案是不可行的。
  • 摩尔定律:每隔18-24个月,服务器的性能提升一倍。但是数据的增长速度是远远超过服务器性能的提升。在数据不断增长的情况下,单位时间内,服务器所需要处理的数据量是越来越大。最终的结论:
    靠 纵向提升服务器性能的手段 在理论上有 瓶颈的。
  • 横向提升核心思想: 大事化小 分而治之
    终极解决方案:
    1、先把文件切碎成很多的小文件。
    2、每一个服务器节点去处理一个小文件。
    3、再把所有服务器的处理结果汇总到一起。
    4、再把所有的数据合并到一起求出出现次数最多的那个ip。
    横向提升要解决3个问题
    1、数据分布式存储的问题HDFS
    2、编写作业代码MapReduce,map负责读取文件内容到内存,reduce负责统计
    3、集群资源(CPU、内存)调度

2.2 HDFS简介

在这里插入图片描述
企业存储数据时最头疼的事情是什么?不是数据量太大或者读写速度不够快,而是数据丢失。
那么 HDFS 是如何保证在机器故障情况下文件数据依然不丢失的呢?就是数据备份,说白了就是多存几份。如果我们不去配置,HDFS 默认3份。
Rack(机架)有若干台机器垂直地组成一个 Rack,像一个书架一样。通常,一个 rack 共享一个电源,一条网线,一个交换机;据统计,很多数据中心里的故障都是一整个 rack 出问题。出于这个原因,
HDFS 备份数据的时候,(假设还是3份),通常在同一个 rack 上储存一份,然后在另一个 rack 上储存另两份。这样就保证数据有更高的安全性。

2.2.1 HDFS框架图

在这里插入图片描述

2.2.2 HDFS读文件

在这里插入图片描述

  • 客户端通过调用FileSystem对象的open()方法来打开文件(第1步),
  • DistributedFileSystem通过RPC调用询问NameNode来得到此文件最开始几个block的文件位置(第2步)。
  • 对每一个block来说,namenode返回拥有此block备份的所有namenode的地址信息(按集群的拓扑网络中与客户端距离的远近排序)
    以上步骤完成后,DistributedFileSystem会返回一个FSDataInputStream。用来处理namenode和datanode的I/O操作。客户端然后执行read()方法(第3步)
  • DFSInputStream连接到第一个datanode(也即最近的datanode)来获取数据。通过重复调用read()方法(第4、第5步),文件内的数据就被流式的送到了客户端。
  • 当真个文件读取完毕时,客户端调用FSDataInputSteam中的close()方法关闭文件输入流(第6步)。
  • 如果在读某个block是DFSInputStream检测到错误,DFSInputSteam就会连接下一个datanode以获取此block的其他备份,同时他会记录下以前检测到的坏掉的datanode以免以后再无用的重复读取该datanode。
  • DFSInputSteam也会检查从datanode读取来的数据的校验和,如果发现有数据损坏,它会把坏掉的block报告给namenode同时重新读取其他datanode上的其他block备份。

2.2.3 HDFS衡量节点距离

在这里插入图片描述
如果将数据中心d1里的机架r1上的节点n1定义为/d1/r1/n1的话,那么将会有以下结果:
distance(/d1/r1/n1, /d1/r1/n1) = 0 (同一节点上的两个应用程序)
distance(/d1/r1/n1, /d1/r1/n2) = 2 (同一机架上的两个节点)
distance(/d1/r1/n1, /d1/r2/n3) = 4 (同一数据中心里不同机架上的两个节点)
distance(/d1/r1/n1, /d2/r3/n4) = 6 (不同数据中心的两个节点)

2.2.4 HDFS写文件

在这里插入图片描述

  • 首先客户端通过DistributedFileSystem上的create()方法指明一个欲创建的文件的文件名(第一步),
  • DistributedFileSystem再通过RPC调用向NameNode申请创建一个新文件(第二步)。namenode检查是否有同名文件存在以及用户是否有相应的创建权限,DistributedFileSystem返回一个FSDataOutputStream以供客户端写入数据,
  • 当客户端开始写数据时(第三步),DFSOutputStream把写入的数据分成包(packet), 放入一个中间队列——数据队列(data
    queue)中去。DataStreamer从数据队列中取数据,同时向namenode申请一个新的block来存放它已经取得的数据。namenode选择一系列合适的datanode(个数由文件的replica数决定)构成一个管道线(pipeline),这里我们假设replica为3,所以管道线中就有三个datanode。
  • DataSteamer把数据流式的写入到管道线中的第一个datanode中(第四步),第一个datanode再把接收到的数据转到第二个datanode中(第四步),以此类推。
  • DFSOutputStream同时也维护着另一个中间队列——确认队列(ack
    queue),确认队列中的包只有在得到管道线中所有的datanode的确认以后才会被移出确认队列(第五步)。
  • 如果某个datanode在写数据的时候当掉了,下面这些对用户透明的步骤会被执行:
      1)管道线关闭,所有确认队列上的数据会被挪到数据队列的首部重新发送,这样可以确保管道线中当掉的datanode下流的datanode不会因为当掉的datanode而丢失数据包。
      2)在还在正常运行的datanode上的当前block上做一个标志,这样当当掉的datanode重新启动以后namenode就会知道该datanode上哪个block是刚才当机时残留下的局部损坏block,从而可以把它删掉。
      3)已经当掉的datanode从管道线中被移除,未写完的block的其他数据继续被写入到其他两个还在正常运行的datanode中去,namenode知道这个block还处在under-replicated状态(也即备份数不足的状态)下,然后他会安排一个新的replica从而达到要求的备份数,后续的block写入方法同前面正常时候一样。
  • 有可能管道线中的多个datanode当掉(虽然不太经常发生),但只要dfs.replication.min(默认为1)个replica被创建,我们就认为该创建成功了。剩余的replica会在以后异步创建以达到指定的replica数。
  • 客户端完成写数据后,它会调用close()方法(第六步)。
  • 这个操作会冲洗(flush)所有剩下的package到pipeline中,等待这些package确认成功,然后通知namenode写入文件成功(第七步)。
  • 这时候namenode就知道该文件由哪些block组成(因为DataStreamer向namenode请求分配新block,namenode当然会知道它分配过哪些blcok给给定文件),它会等待最少的replica数被创建,然后成功返回。

2.3 YARN工作机制

2.3.1 YARN简介

YARN 是一个通用资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。
在这里插入图片描述
YARN 是 Hadoop2.x 版本中的一个新特性,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO等。能支持除 MapReduce 以外的更多分布式计算程序
  1、YARN 并不清楚用户提交的程序的运行机制
  2、YARN 只提供运算资源的调度(用户程序向 YARN 申请资源,YARN 就负责分配资源)
  3、YARN 中的主管角色叫 ResourceManager
  4、YARN 中具体提供运算资源的角色叫 NodeManager
  5、这样一来,YARN 其实就与运行的用户程序完全解耦,就意味着 YARN 上可以运行各种类 型的分布式运算程序(MapReduce 只是其中的一种),比如 MapReduce、Storm 程序,Spark 程序,Tez ……
  6、所以,Spark、Storm 等运算框架都可以整合在YARN上运行,只要他们各自的框架中有符合YARN 规范的资源请求机制即可

2.4 MapReduce工作机制

2.4.1 简单案例

在这里插入图片描述

2.4.2 MapReduce工作机制

在这里插入图片描述

三、Hive工作机制简介

在这里插入图片描述
在这里插入图片描述
Hive 由Facebook 实现并开源,Hive的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
缺点:

  • Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
  • Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而不是OLTP(联机事务处理),这就是数据处理的两大级别)。
    Hive 具有 SQL 数据库的外表,但应用场景完全不同,Hive 只适合用来做海量离线数 据统计分析,也就是数据仓库。
    在这里插入图片描述

四、Kylin工作机制简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Kylin的理论基础是Cube理论,每一种维度组合称之为Cuboid,所有Cuboid的集合是Cube。 其中由所有维度组成的Cuboid称为Base Cuboid,图中(A,B,C,D)即为Base Cuboid,所有的Cuboid都可以基于Base Cuboid计算出来。 在查询时,Kylin会自动选择满足条件的最“小”Cuboid,比如下面的SQL就会对应Cuboid(A,B):
select xx from table where A=xx group by B
在这里插入图片描述
全维度构建
假设一张表有3个字段name,age,sex,那么当通过kylin构建这张表的cube时,hbase的表结构如下所示。注意本示例没有度量字段,value表示记录条数累计,代表count(*),度量如果存在那么也是存储在value的位置,可以手动配置cf。
通过图1很明显的可以看到,kylin将每个维度的所有基数都枚举了出来,并通过组合的方式构建出hbase的rowkey,另外将组合对应的记录数做预统计保存在value中,对应hbase表中的一个cf:c。
在这里插入图片描述
在这里插入图片描述

五、Hbase工作机制简介

在这里插入图片描述

5.1 HFile

在这里插入图片描述

5.2 HBase架构设计

在这里插入图片描述

  • 主节点HMaster
    管理HRegionServer,实现其负载均衡。
    管理和分配HRegion,比如在HRegion拆分时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
    监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)。处理Schema更新请求 (创建、删除、修改Table的定义等)。
    HMaster没有单点问题,在Hbase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master胜出。
  • HRegionServer
    HRegionServer维护HMaster分配给它的region,处理这些Region的IO请求。
    HRegionServer负责切分在运行过程中变得过大的Region。
  • ZooKeeper
    通过选举,保证任何时候,集群中只有一个HMaster,HMaster与HRegionServer启动时会向ZooKeeper注册。实时监控HRegionServer的上线和下线信息,并实时通知给HMaster。存贮所有Region的寻址入口和HBase的Schema和Table元数据。Zookeeper的引入实现HMaster主从节点的failover。

5.3 HRegionServer

在这里插入图片描述

5.4 数据查找

在这里插入图片描述

六、数据存储系统对比

在这里插入图片描述

参考博客
大数据技术栈
Hadoop学习之路
Kylin 简介
Apache Kylin 入门


http://chatgpt.dhexx.cn/article/ZUuxqTXK.shtml

相关文章

一节课轻松通关 Spark

大数据跟我学系列文章007-三节课轻松通关 Spark (一) 文章目录 大数据跟我学系列文章007-三节课轻松通关 Spark (一)前言第01讲: MapReduce:计算框架和编程模型第02讲:Hadoop:集群的…

基于深度强化学习的连接查询优化

Krishnan, S., et al. (2018). "Learning to optimize join queries with deep reinforcement learning." 如何优化 SQL 连接是数据库社区数十年来一直在研究的一个大问题。伯克利 RiseLab 公布的一项研究表明,深度强化学习可以被成功地应用在优化 SQL 连…

Flink流处理框架总结

Flink流处理框架 第一部分 Flink 概述第 1 节 什么是 Flink第 2 节 Flink 特点第 2 节 Flink 应用场景第 4 节 Flink 核心组成及生态发展第 5 节 Flink 处理模型:流处理与批处理第 6 节 流处理引擎的技术选型 第二部分 Flink快速应用第 1 节 单词统计案例&#xff0…

Presto(Trino)动态过滤与优化器

Presto 系列文章目录- 动态过滤与谓词下推 文章目录 Presto 系列文章目录- 动态过滤与谓词下推trino性能提升新特性Dynamic partition pruning动态分区裁剪设计注意事项执行未来的工作 Hive connector延迟执行动态过滤器 动态过滤分析和确认动态过滤器收集阈值维度表布局局限性…

AI 应用的全流程存储加速方案技术解析和实践分享

AI 应用对存储系统的挑战是全面的,从离应用最近的数据计算如何加速,到离应用最远的数据存储如何管理,到数据存储和数据计算之间如何高效流通,再到不同应用之间的资源调度如何协调 …… 这其中每一个环节的低效,都有可能…

flink部署-1.13

1. 版本说明 本文档内容基于 flink-1.13.x,其他版本的整理,请查看本人博客的 flink 专栏其他文章。 2. 概述 Flink 是一种通用性框架,支持多种不同的部署方式。 本章简要介绍 Flink 集群的组成部分、用途和可用实现。如果你只是想在本地启…

Spark2.1.0——存储体系概述

本书在5.7节曾介绍过存储体系的创建,那时只为帮助读者了解SparkEnv,现在是时候对Spark的存储体系进行详细的分析了。简单来讲,Spark存储体系是各个Driver、Executor实例中的BlockManager所组成的。但是从一个整体出发,把各个节点的BlockManager看成存储体系的一部分,那么存…

探秘百度数据工厂Pingo的多存储后端数据联合查询技术

作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建。目前是百度数据工厂Pingo核心团队的技术负责人。 Pingo是来自百度的离线大数据集成开发平台,使用Spark作为计算引擎,深度整合了资源…

Tachyon与Ignite系统对比

1. Alluxio(原Tachyon)内存文件系统 1.1 系统概述 Alluxio(原Tachyon)是以内存为中心(memory-centric)的虚拟的分布式存储系统,拥有高性能和容错能力,能够为集群框架(如Spark、MapReduce)提供可靠的内存级…

百度案例:利用Alluxio实现安全的即插即用分布式文件系统

全文共3361字,预计学习时长7分钟 本文介绍了百度如何依靠开源项目Alluxio,在一个企业大数据分析解决项目Pingo中创建了一个安全、模块化和可扩展的分布式文件系统服务。 在这篇文章中,你将学习如何依靠Alluxio来实现一个统一的分布式文件系统服务,以及如何在Alluxio之上添…

如何通过API调用alluxio 文件系统

如何通过API调用alluxio 文件系统 一般来说,不论从spark,hfds等等大数据分布式框架,甚至使用公有云api,来说,与集群进行交互不外乎以下这些套路: 设置configuration(有很重要的主节点host&…

office产品密钥如何找回

明明自己有正版office产品密钥却因为时间太久种种原因找不到了,登录微软账户查看信息也没有,怎么办?? 不要着急,只要你还记得你当时激活office的微软账号和密码,可以登录微软账户,follow me&am…

qq恢复官方网站服务器繁忙,qq恢复官方网站

删除好友,又后悔了!!?? 想把好友找回来? 世上没有后悔药,但是系统是还是人性化的, 所以,QQ官方给广大用户提供了好友找回功能。登录qq以恢复官方网络以恢复朋友操作。 在qq恢复官方网…

手机计算机怎么恢复出厂设置密码,如何找回手机锁屏密码?

原标题:如何找回手机锁屏密码? 世界上最遥远的距离不是我站在你面前你却不知道我爱你,而是手机明明在手上偏偏忘了锁屏密码! 我们总是会有犯傻的时候,比如突然想到一个数字觉得还不错,于是想着给手机改个密…

Vue + element + Springboot 通过邮箱找回密码

Vue element Springboot 通过邮箱找回密码 需求分析一、导入二、流程分析 详细设计一、前端界面设计1. 登录界面2. 重置密码界面 二、后端代码设计1. JavaMail配置2. QQ邮箱开启STMP授权3. 配置applicaiton.yml文件4. 新建文件夹5. 邮件配置:6. User相关类&#xf…

5年前带留言的公众号还可以找回,让我来教你该怎么做

今天注定是很神奇的一天,因为今天我居然找回了5年前注册的公众号,一个带留言功能的公众号。 了解公众号的人可能都知道,腾讯在2018年3月宣布暂停新注册公众号的留言功能,这之后注册的公众号都不具备留言功能。 这成了很多号主运营…

怎么找回丢失的手机?

手机定位这个功能,每个智能手机都必备的。但是如果手机不小心丢失了,能通过手机本身懂的定位功能,找回自己的手机吗?其实大部分智能手机,都能通过定位功能找回手机的。但是使用查找手机定位必须已打开查找手机功能且丢…

Word文档恢复,2大方案教你找回没有保存或者被删除的数据

我们经常会使用到Word文档来记录各种东西,有时候Word文档输入数据到一半,就不小心关闭,却没有保存。或者在电脑清理的时候,不小心把重要的Word文档数据删除了,又或者文档已经删除了一段时间。 Word文档能恢复吗&#…

计算机用户删除文件找回,电脑上删除的文件如何找回 业内人士分享小技巧

电脑上删除的文件如何找回?众所周知,使用数据恢复软件可以找回被删除的文件,但是并非所有删除的文件都可以顺利找回。想知道如何最大限度地确保完整恢复删除的文件吗?小编接下来就将为大家分享关于如何完整找回误删除文件的方法。 如何找回被…

手机被偷完整找回方案

近日看到一些有关于手机失窃的案例,回想起自己身边的同学和朋友也有被偷手机的经历。想着记录一下,提供一些防御方法。之前学Android开发时也有探究过定位原理,今天正好放到文章一起。 丢失场景 场景一:遗落在餐厅或饭店。这种情况…