kylin构建时数据倾斜发生情况及解决方案一览:
1)未开启重新分发中间表 (kylin.source.hive.redistribute-flat-table
: false的时候,默认为True)
问题分析:先考虑启动Kylin自带缓解数据倾斜方案,也就是重分发中间表。
解决方案:开启重分发中间表kylin.source.hive.redistribute-flat-table:true
2)开启重分发表且设置share by维度
问题分析:设置share by维度之后,数据会按照share by维度分发,数据倾斜说明该项不适合作为share by列
解决方案:1、选取其他share by列 2、去掉share by列
3)开启重分发表且未设置share by维度
问题分析:在Build Base Cuboid (构建基础cuboid)的Mapper就是重分发中间表一步的reducer,所以数据倾斜实质是重分发表中reduce数据不均衡导致。网上大多资料显示未设置share by维度时,按照distribute by rand分发,但那是Kylin2.X的做法,在Kylin3.X中引入了参数ylin.source.hive.redistribute-column-count(
重分配列的数量,默认值为 3),如果不设置的该参数就会在第二步时distribute by rowkeys的前3列,这也是我们一般需要将Rowkeys中超高基前移的原因。如果Rowkeys前三列属性保证数据均衡,就会导致空有重分发表依旧数据倾斜
解决方案:1、将超高基维度前移 2、 设置合适的share by列 3、增加ylin.source.hive.redistribute-column-count个数,直到能满足均匀分布要求