参考资料
一、hive任务执行时间异常延长
1、每次任务运行都需要3~4h
- MySQL库表的索引未正确建立or引用
- 抽数任务设置的带宽不够
2、某次任务运行超时告警
- 数据倾斜(Data Skew):在数据处理过程中,某个关键字段的数据分布不均衡,导致部分节点或任务的负载远远超过其他节点或任务的情况。数据倾斜可能导致作业执行时间的不均衡,影响整个作业的性能。
- 判断依据:reduce阶段一直卡99%不动;表中某个字段某个值的取值范围异常广泛。
- 解决方法:解决数据倾斜需要采取相应的优化措施,如使用随机前缀、哈希调优、倾斜键的拆分、扩容中间表等。
- 热节点(Hot Node):在大数据集群中负载较高、处理请求较多的节点。由于负载过高,热节点容易成为性能瓶颈,导致系统整体的响应时间增加。
- 判断依据:通过系统监控数据查看每个节点的CPU利用率、内存利用率和网络流量。
- 解决方法:为了避免热节点出现,可以通过负载均衡策略将工作负载均衡地分布到多个节点上,以提高系统的吞吐量和稳定性。
二、数据倾斜调优实战
1. HQL代码调优
set hive.groupby.skewindata=true;
- 这是一个Hive的设置选项,它是用于处理数据倾斜的优化设置。数据倾斜在大数据处理中是一个常见的问题,即部分数据过于集中,导致处理这部分数据的节点负载过重,而其他节点则闲置,这会影响整体性能。通过设为true,Hive会通过采样数据并按总体数据的分布情况将任务均匀地分配到所有节点上,从而解决数据倾斜的问题。
- 这个设置在多个count(distinct xxx)操作时要小心使用,因为它会引入额外的阶段,并可能与相关的优化冲突。
set hive.auto.convert.join=true;
- 这是一个用于优化join操作的Hive设置选项。在处理join操作时,通常来说大表join小表的性能会比大表join大表的性能好。通过将这个设置设为true,Hive会自动检测join的表的大小,若小表的大小不超过一定阈值,它会自动将小表加载到内存中,并将join操作转换为mapjoin操作。mapjoin操作能够在内存中完成,从而提高了性能。