HIVE数据倾斜的可能原因有哪些,主要解决方法有哪些
数据倾斜理解:数据层的分布式处理过程中,出现明显的Map或Reduce过程的数据IO 的量级有巨大变化 。 可能原因,分两类:真倾斜和假倾斜 一、假倾斜:本身数据无倾斜,但处理时不均衡导致的数据 倾斜现象 1) 原因:机器配置不一、网络带宽及其通信不一,导 致相同数据量处理情况下,任务的执行程度有明显 的差异。 解决方法:均衡机器配置,标签式解决方法属于更 高级更生产化的解决方法。 2) 原因:程序Bug导致的假倾斜 解决方法:优化代码,解决掉Bug即可。 二、真倾斜:数据真的存在不均衡,而且比较大 1) 原因:输入数据存在大块和小块的严重问题,比如 说:一个大文件128M,还有1000个小文件,每 个1KB。 解决方法:任务输入前做文件合并,将众多小文件 合并成一个大文件。 2) 原因:对数据可切分并行特性应用不正确。比如: 10G的一个rc,或是orc,lzo,和100个128M的 rc,orc,lzo 在并行处理时,不会出现倾斜。如果格 式为gzip,snappy 等不可切分格式,则出现一个 Map进程处理10G的文件的严重倾斜情况。 解决方法:当数据不能利用切分并行计算时,一定 要合理计算出文件的占磁盘大小,最好不要超过 200M以上。 3) 原因:Join 端产生大数据量Key的合并情况,经 如说有视频流中的刷流量情况,会员帐号当中的共 享帐号情况。 解决方法:找到该种黑名单种子列表,在Map阶 段时候,即将其过滤掉。 4) 万能贴解决:hive.groupby.skewindata,通过 任务先分散并行执行一个阶段,然后再全局合并。