Hadoop发生数据倾斜时怎么定位是由哪些数据引发的

xyh1re 2018-09-11 07:53:44
在运行MR任务时,数据的key分布不均会引发数据倾斜,但是要怎么才能定位到是哪些key引起的数据倾斜呢?
举一个例子,在word count中,如果发生了数据倾斜,怎么确定是哪些单词引发了数据倾斜呢?对这些单词引发的数据倾斜该怎么处理?
网上搜的关于数据倾斜的处理都是增加reduce个数,增大reduce任务的JVM内存,重新设计key,重新设计partitioner,使用combiner等。没有结合实例的讲解,有些地方还是弄不明白,比如重新设计key这种方法,对于wordcount这个例子一直想不明白具体要怎么操作。
还有很重要的一点是,没有讲关于怎么定位是哪些数据引发了数据倾斜的方法,希望了解的朋友帮忙解惑,十分感谢!
...全文
697 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyh1re 2018-09-14
  • 打赏
  • 举报
回复
引用 1 楼 chanyue123 的回复:
1. 定位数据倾斜问题 一般来说,我们只需要知道发生了数据倾斜即可,因为通用的解决数据倾斜问题的办法都不是针对特定值的处理来解决的(当然偶尔也有,比如null空值问题),所以不关心到底具体到哪种值的数据导致了数据倾斜。当然,如果一定要知道,可以自己写个通用mr(就是wordcount,加combiner,输入可以指定特定字段组合作为你的key,以及一个阈值,超过这个阈值的写出来,就可以知道哪些数据是非常多的) 2. 重新设计key问题 本身这种说法就只是阐述了一种思想,并没有给出具体方法。不过他的本意就是重新设计key的目的在于离散key值,去倾斜。在wordcount中,你可以把1个mr就完成的事情分成2个去做,第一个就是在map过程中,在key后面随机打上一个标记值(这个值范围不要太大,和你reduce数目一致最好),然后做累加输出结果。然后第一个mr的输出作为第二个mr的输入,在第二个mr的map中去掉标记值,再做一次累加即可。
理解了,谢谢!
sf_www 2018-09-12
  • 打赏
  • 举报
回复
1. 定位数据倾斜问题
一般来说,我们只需要知道发生了数据倾斜即可,因为通用的解决数据倾斜问题的办法都不是针对特定值的处理来解决的(当然偶尔也有,比如null空值问题),所以不关心到底具体到哪种值的数据导致了数据倾斜。当然,如果一定要知道,可以自己写个通用mr(就是wordcount,加combiner,输入可以指定特定字段组合作为你的key,以及一个阈值,超过这个阈值的写出来,就可以知道哪些数据是非常多的)
2. 重新设计key问题
本身这种说法就只是阐述了一种思想,并没有给出具体方法。不过他的本意就是重新设计key的目的在于离散key值,去倾斜。在wordcount中,你可以把1个mr就完成的事情分成2个去做,第一个就是在map过程中,在key后面随机打上一个标记值(这个值范围不要太大,和你reduce数目一致最好),然后做累加输出结果。然后第一个mr的输出作为第二个mr的输入,在第二个mr的map中去掉标记值,再做一次累加即可。

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧