大数据框架工作流程汇总

1、HDFS读写流程

①写数据流程

HDFS写数据工作流程
1.客户端向NN请求上传文件
2.NN检查目标文件是否存在,父目录是否存在,并返回是否可以上传
3.客户端请求第一个Block上传到哪几个DN
4.NN返回3个DN节点,分别为dn1,dn2,dn3
5.客户端请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成
6.dn1,dn2,dn3逐级应答客户端
7.客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存), 以 Packet (64K)为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。
8.当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务 器。(重复执行 3-7 步)。
PS:packet大小为64K,其中由512byte的chunk组成,包括4byte的chunksum校验

②读数据流程

HDFS读数据工作流程
1.客户端向NN请求下载文件,NN通过查询元数据,找到文件块所在的DN地址。
2.挑选一台DN(就近原则,然后随机)服务器,请求读取数据。
3.DN开始传输数据给Client(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
4.Client以Packet为单位接收,先在本地缓存,然后写入目标文件。

2.Hadoop-MR中shuffle工作流程

Shuffle工作流程

3.Yarn工作机制 提交流程

Yarn工作流程
1.MR 程序提交到客户端所在的节点
2.YarnRunner 向 RM 申请一个 Application
3.RM 将该应用程序的资源路径返回给 YarnRunner
4.该程序将运行所需资源提交到 HDFS 上,所需资源:xml配置文件、Jar包、Job.spilt
5.程序资源提交完毕后,申请运行 mrAppMaster。
6.RM 将用户的请求初始化成一个 Task
7.其中一个 NodeManager 领取到Task任务
8.该 NodeManager 创建容器 Container,并产生 MRAppmaster
9.Container 从 HDFS 上拷贝资源到本地。
10.MRAppmaster 向 RM 申请运行 MapTask 资源。
11.RM 将运行 MapTask 任务分配给另外两个 NodeManager,另两个 NodeManager 分 别领取任务并创建容器。
12.MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 MapTask,MapTask 对数据分区排序。
13.MrAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行 ReduceTask。
14.ReduceTask 向 MapTask 获取相应分区的数据。
15.程序运行完毕后,MR 会向 RM 申请注销自己。

4、Hive

①架构

Hive架构

②HQL转化为MR任务流程

HQL转化为MR

1.进入程序,利用Antlr框架定义HQL的语法规则,对HQL完成词法语法解析,将HQL转换为AST(抽象语法树)。
2.遍历AST,抽象出查询的基本组成单元QueryBlock(查询块),可以理解为最小的查询执行单元。
3.遍历QueryBlock,将其转换为OperatorTree(操作树,也就是逻辑执行计划),可以理解为不可拆分的一个逻辑执行单元。
4.使用逻辑优化器对OperatorTree(操作树)进行逻辑优化。例如合并不必要的ReduceSinkOperator,减少Shuffle数据量。
5.遍历OperatorTree,转换为TaskTree。也就是翻译为MR任务的流程,将逻辑执行计划转换为物理执行计划。
6.使用物理优化器对TaskTree进行物理优化。
7.生成最终的执行计划,提交任务到Hadoop集群运行。

即:HQL -> AST -> QueryBlock -> OperatorTree -> TaskTree -> 最终的执行计划

5.HBase数据读写流程

①写数据流程

HBase写数据流程
1.Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。
2.访问对应的Region Server,获取hbase:meta表,根据写请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。
3.与目标Region Server进行通讯;
4.将数据顺序写入(追加)到WAL;
5.将数据写入对应的MemStore,数据会在MemStore进行排序;
6.向客户端发送ack;
7.等达到MemStore的刷写时机后,将数据刷写到HFile。

即:先和ZK通讯,找到meta表所在位置,根据meta表找到目标数据的哪个RS的哪个R中,并做一个缓存。接着与RS通讯,顺序追加写入WAL,写入写缓存排序,刷写。

②读数据流程

HBase读数据流程
1.Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。
2.访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。
3.与目标Region Server进行通讯;
4.分别在BlockCache、MemStore和BC中没有缓存的Store File(HFile)文件查询目标数据,并将查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。
5.将查询到的新的数据块(Block,HFile数据存储单元,默认大小为64KB)缓存到Block Cache。
6.将合并后的最终结果返回给客户端。
注:①HBase读比写慢
②BlockCache/Memstore/访问BC中没有缓存的StoreFile
/******************************************************************************************************/

To Be Continued…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值