我是靠谱客的博主 健康楼房,最近开发中收集的这篇文章主要介绍MapReduce相关优化以及解决数据倾斜问题MapReduce相关优化以及解决数据倾斜问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MapReduce相关优化以及解决数据倾斜问题

1. DistributedCache 分布式缓存

Mapreduce中会将map输出的kv对,按照相同key分区(调用getPartition),
然后分发给不同的 reducetask 来进行处理。Map 阶段的时候调用了 Partitioner
组件(返回分区号),由它决定将数据放到哪个区中,默认的分区规则为:根据 key
的 hashcode%reducetask 数来分发。
当然我们也可以自定义分区组件,改写默认的分区规则。

1.1. 存在的问题

如若 Mapper 输出的一些 Key 特别多,另一些 Key 特别少就会产生数据倾斜,
造成一些 Reducer 特别忙,一些则比较闲,我们说 Mapper 端相同 key 的输出数
据会发到同一个 Redurce 端,需要把 key 相同的放在一起才能进行拼接,所以才
需要 Reducer。如果我们不需要 Reducer 就能做拼接,就不存在数据倾斜了。

1.2. 解决方案

Map 端 Join 解决数据倾斜,我们为每一个 MapTask 准备一个表的全表数据
文件。这种机制叫做 Map Side Join。当然这个表的全表不能很大。

1.3. 原理阐述

适用于关联表中有小表的情形;
可以将小表分发到所有的 map 节点,这样,map 节点就可以在本地。对自己
所读到的大表数据进行 join 并输出最终结果,可以大大提高 join 操作的并发
度,加快处理速度;
Hadoop 提供了一个 Distributed Cache 机制,能把文件在合适的时候发给
MapTask,MapTask 就可以从本地进行加载小表数据;

2. CombineTextInputFormat 小文件处理场景

2.1. 存在的问题

HDFS 设计是用来存储海量数据的,特别适合存储 TB、PB 量级别的数据。但
是随着时间的推移,HDFS 上可能会存在大量的小文件,这里说的小文件指的是
文件大小远远小于一个 HDFS 块(128MB)的大小;HDFS 上存在大量的小文件至
少会产生以下影响:
消耗 NameNode 大量的内存
延长 MapReduce 作业的总运行时间
因为 MapReduce 框架默认的 TextInputFormat 切片机制是对任务按文件规
划切片,如果有大量小文件,就会产生大量的 MapTask,处理小文件效率非常低。

2.2. 解决方案

Hadoop 内置提供了一个 CombineTextInputFormat 类来专门处理小文件,
其核心思想是:根据一定的规则,将 HDFS 上多个小文件合并到一个 InputSplit
中,然后会启用一个 Map 来处理这里面的文件,以此减少 MR 整体作业的运行时
间。

最后

以上就是健康楼房为你收集整理的MapReduce相关优化以及解决数据倾斜问题MapReduce相关优化以及解决数据倾斜问题的全部内容,希望文章能够帮你解决MapReduce相关优化以及解决数据倾斜问题MapReduce相关优化以及解决数据倾斜问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部