Hive数据倾斜JOIN操作,如何避免性能灾难?
- 内容介绍
- 文章标签
- 相关推荐
Hive数据倾斜JOIN操作,如何避免性能灾难?
记得是7月初某个早上,我接到了一个紧急任务:处理两张大型数据表的关联查询。数据量看起来并不算特别大,左表约8000万行,右表约1.2亿行。我按照常规思路编写了JOIN查询:,内卷。
SELECT _id, _count, _count, _active_dateFROM us 梳理梳理。 er_order_summary aJOIN user_behavior_summary b ON _id = _id;

本以为这个查询会在30分钟内完成,但实际运行了2个小时后仍然没有结束。通过YARN的资源管理器, 我发现有一个Reduce任务施行时间异常长,而其他Reduce任务早已完成。
问题根源在于数据质量问题:
这玩意儿... 查询后来啊令人震惊:右表中存在大量user_id为0和-1的异常数据, 其中user_id=0的记录高达3000万条,user_id=-1的记录有1500万条。这就是导致数据倾斜的元凶!
补救一下。 可以看到Reducer 7处理了5200万条记录,而其他Reducer大多只处理100-200万条记录。
Hive数据倾斜JOIN操作,如何避免性能灾难?
记得是7月初某个早上,我接到了一个紧急任务:处理两张大型数据表的关联查询。数据量看起来并不算特别大,左表约8000万行,右表约1.2亿行。我按照常规思路编写了JOIN查询:,内卷。
SELECT _id, _count, _count, _active_dateFROM us 梳理梳理。 er_order_summary aJOIN user_behavior_summary b ON _id = _id;

本以为这个查询会在30分钟内完成,但实际运行了2个小时后仍然没有结束。通过YARN的资源管理器, 我发现有一个Reduce任务施行时间异常长,而其他Reduce任务早已完成。
问题根源在于数据质量问题:
这玩意儿... 查询后来啊令人震惊:右表中存在大量user_id为0和-1的异常数据, 其中user_id=0的记录高达3000万条,user_id=-1的记录有1500万条。这就是导致数据倾斜的元凶!
补救一下。 可以看到Reducer 7处理了5200万条记录,而其他Reducer大多只处理100-200万条记录。

