irpas技术客

Hive数据倾斜_fragrans

网络 7146

目录

1. 什么是数据倾斜

2. 造成数据倾斜的原因

3. 数据倾斜应对办法

4. 参考资料


1. 什么是数据倾斜 数据倾斜,即单个节点任务所处理的数据量远大于同类型任务所处理的数据量,导致该节点成为整个作业的瓶颈,这是分布式系统不可能避免的问题。
2. 造成数据倾斜的原因 从本质来说,导致数据倾斜有两种原因: 一是任务读取大文件,二是任 务需要处理大量相同键的数据。 任务需要处理大量相同键的数据,这种情况有以下 4 种表现形式: (1)? 数据含有大量无意义的数据,例如空值( NULL )、空字符串等。 (2)含有倾斜数据在进行聚合计算时无法聚合中间结果,大量数据都需要经过 Shuffle 阶段的处理,引起数据倾斜。 (3)两表进行 Join ,都含有大量相同的倾斜数据键。 (4) 数据在计算时做多维数据集合,导致维度膨胀引起的数据倾斜。


3. 数据倾斜应对办法

根据上面描述的造成数据倾斜的原因,有针对性的应对即可。

(1)不可拆分大文件引发的数据倾斜

归档、不支持文件分割的压缩方式、以后有任务要读取压缩文件、单个map读取瓶颈、map读取倾斜

Map读取文件的数据倾斜:当集群的数据量增长到一定规模,有些数据需要 归档 或者转储,这时候 往往会对数据进行压缩;当对文件使用GZIP 压缩等 不支持文件分割操 作的压缩方式,在日后有作业涉及读取压缩后的文件时, 该压缩文件 只会 被一个 任务 所读取。如果该压缩文件很大,则处理该文件的Map 需要花费的时间会 远多于读取普通文件的Map 时间, 该Map任务会成为作业运行的瓶颈 。这种 情况也就是 Map读取文件 的数据倾斜。 应对办法:可以采用 bzip2 和 Zip 等支持文件分割的压缩算法 (2)无意义的空值数据 这些与业务无关的数据引入导致在进行分组聚合或 者在执行表连接时发生数据倾斜。对于这类问题引发的数据倾斜,在计算过 程中排除含有这类“ 异常 ” 数据即可。 (3) 两个 Hive 数据表连接时引发的数据倾斜 两表进行普通的 repartition join 时,如果表连接的键存在倾斜,那么在 Shuffle阶段必然会引起数据倾斜。 遇到这种情况,Hive 的通常做法还是启用两个作业,第一个作业处理没 有倾斜的数据,第二个作业将倾斜的数据存到分布式缓存中,分发到各个 Map任务所在节点。在 Map 阶段完成 join 操作,即 MapJoin ,这避免了 Shuffle,从而避免了数据倾斜。


4. 参考资料

Hive千亿级数据倾斜解决方案(好文收藏)

本文内摘自《hive性能调优实践?》,感谢知识分享


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive数据倾斜 #1 #2 #务需要处理大量相同键的数据