大数据技术学习——MapReduce
1 一句话介绍
MapReduce是大规模并行批处理计算框架,用Map以及Reduce实现基本并行计算任务。
2 计算框架
框架是基于特定领域而言的,领域内共性部分沉淀下来就形成框架,领域内上层开发者则需要遵循框架定义的规范,根据需求添砖加瓦。另外,大的领域可继续缩小范围,新增共性成分形成子框架。所谓计算框架就是计算领域内沉淀下来的底层的数据处理逻辑架构。例如,分布式计算领域内,最基础的共性就是将任务切分成子任务,再分发至多台计算机上执行,基于此再延伸出其他共性部分,包括容错、负载分担、分布式一致性等等。该领域还可进一步细分成批处理、流处理、交互式分析等子领域。
3 数据处理架构图
MapReduce是批处理计算框架。整个框架的核心就是Map以及Reduce任务,用户只需要根据实际情况实现Mapper类以及Reducer即可,剩下交由框架去执行(包括shuffle)。
整体的数据处理逻辑架构如下:
(注:map会对中间结果进行分区、排序,reduce会进行合并排序)
WordCount示例如下:
- 文件按照一定标准分片(默认等于BlockSize),每个分片对应一个Map任务。文件切分时会尽量将本地磁盘上存储的数据分配给本地的Map任务,避免网络开销。
- Map任务输出键值对。
- 根据应用程序定义的分组方式(上图即根据单词),shuffle过程对数据进行分组,然后启动相应个数的Reduce任务,且Reduce任务通过网络获取该组所有键值对。
- Reduce任务将组内键名相同的值合并为列表输出。
4 数据倾斜
数据倾斜主要发生在Reduce阶段,而很少发生在 Map阶段,其原因是Map端的数据倾斜一般是由于HDFS数据存储不均匀造成的(一般数据均匀分块存储,每个文件大小基本固定),而Reduce阶段的数据倾斜一般是因为分析师没有考虑到某种key值对应value数据量偏多的情况而导致的。
5 Tez引擎
Tez引擎源于MapReduce引擎,核心思想是将Map与Reduce任务进一步拆分为input、processor、sort、merge以及output算子,灵活表达更加复杂的操作,组合若干操作形成DAG计算任务,减少磁盘存储中间结果。
目前,Tez引擎基本与Hive捆绑,在其他领域应用不多,社区也不活跃。
6 参考
- https://juejin.cn/post/6844904160714817543
- https://cloud.tencent.com/developer/article/1030476
- https://zhuanlan.zhihu.com/p/426086549
- 点赞
- 收藏
- 关注作者
评论(0)