1.
优化数据源,从源头避免 如果导致数据倾斜的表时Hive表,而Hive表中数据的分布很不均匀,而业务需要频繁的对Hive表执行某个分析操作,那么我们可以尝试使用Hive ETL预处理数据(按key进行聚合,或预先和其他表join)。 之后所有操作针对的数据源就不是原来的Hive表了,而是预处理之后的Hive表。 不过需要注意的是,因为数据本身存在分布不均匀的问题,所以在Hive ETL过程中还是会存在数据倾斜,导致Hive ETL速度很慢。我们只是把数据倾斜的发生提前到了Hive ETL中。 方案优点:执行起来简单便捷,效果还很好。 方案缺点:Hive ETL过程中还是会发生数据倾斜。
2.
增加并行度 手动的对shuffle算子传入一个参数,该参数设定了shuffle算子执行时shuffle read task的数量,通过增大