目录
一、概述
MapReduce是代码级别的, 没有角色划分, 直接通过Python或者Java操作它即可.
MapReduce程序所需的 数据源 及 结果数据的存储, 由 HDFS 来完成.
MapReduce程序执行所需的资源等由 Yarn来调度的.
MR程序的两个弊端是什么?
1. 开发难度相对较大. # 通过Hive解决, 写SQL => 底层自动转MR程序.
2. 执行速度相对较慢. # 换计算引擎, 例如: Presto, Spark, Flink...
基于MapReduce构建分布式SQL引擎, 需要有哪些组件?
元数据管理服务(metastore): 负责管理元数据的.
SQL解析器: 负责解析SQL, 将其转成MR程序, 运行并获取结果, 然后返回.
二、MapReduce核心八步
三、MapReduce执行流程
1. MR程序分为MapTask阶段 和 ReduceTask阶段, 且:
1个切片 = 1个Block块 = 1个MapTask任务 = 1个分好区, 排好序, 规好约的文件.
1个分区 = 1个ReduceTask任务 = 1个结果文件.
2. 先对文件切片, 每个片的大小默认和Block块大小一致(即: 128MB), 且每个切片的数据会交由1个MapTask任务来处理.
3. MapTask任务采用逐行的方式从切片中读取数据, 逐行处理, 且会将处理后的数据放到 环形缓冲区(默认大小:100MB, 溢写比:0.8)
4. 当环形缓冲满(80MB)的时候, 会触发溢写线程(spill), 对该部分数据做分区, 排序, 规约的操作, 然后存储到磁盘上(小文件)
5. 对上述的小文件进行合并(默认: 10个一合并), 获取最终的文件, 即: 1个MapTask = 1个分好区, 排好序, 规好约的文件.
6. 当MapTask任务执行结束后, ReduceTask会开启1个拷贝线程, 从各个MapTask的结果文件中, 拷贝属于自己的数据(根据分区编号识别).
7. ReduceTask对数据进行 合并, 排序的操作, 获取最终结果数据.
8. ReduceTask将处理好的结果数据写到磁盘文件中, 1个ReduceTask = 1个结果文件, 至此, MR程序执行结束.
总结
以上就是今天的内容,本文介绍了MapReduce的相关原理.