【Hive】部分基础语法/调参优化

本文概述了Hive优化的关键方法,包括减少数据量、避免数据倾斜、防止全表扫描、合并Job任务以及在代码层面的改进,如使用中间表、合理选择存储格式和JVM重用。同时讨论了数据倾斜问题的调参和Job任务的并行执行策略。

Hive优化的核心思想:

  减少数据量(例如分区等操作)

  避免数据倾斜(例如加参数,打散key值等的操作)

  避免全表扫描(where过滤,特定分区等的操作,和减少数据量目标一致)

  减少job数(相同的on条件放在一起作为一个任务)

下面就日常工作总结出的一些基础优化点,从以下几方面分开阐述

代码层面:

  1. 考虑使用中间表进行存储,避免子查询太复杂且数据量太大。
  2. 大小表的join 不过现在hive内部进行了优化,自动视小表为驱动表
  3. 分区/分桶表的优化,避免全表扫描,提升查询效率
  4. 选择合适的存储格式/压缩格式
  5. 尽量避免 select*
  6. 合理使用  union 减少 job数量
  7. 利用多表相同的join条件,不管什么关联,不管几个表join的key一样,会合并为一个mr任务
  8. 合理选择数据类型
  9. 子查询尽量用关联代替
  10. 插入数据量大,多批insert  into 插入

数据倾斜问题:

  1. 调参优化,开启负载均衡。(但是无法从根本上解决数据倾斜,处理过程相对黑盒)
  2. 正常操作时将集中的key按照一定规则添加随机数。
  3. 大量null值的过滤

Job任务调参:

  1. map端的join
  2. 小文件合并
  3. Mapper/reducer的个数调整
  4. 合适的存储格式
  5. 本地模式(不是所有的sql语句都需要集群运行)
  6. Jvm重用机制:默认情况下一个map/reduce task  就会启动一个jvm进程,一个task执行完毕之后,jvm进程就会退出。如果任务花费时间很短,多次启动的话jvm消耗会很大,开启重用机制,一直占用使用的task卡槽,以便随时再次使用,如果某个不平衡的job中数据倾斜,部分reducetask时间很久,那么保留的卡槽的会一直占用才会释放。一般建议 jvm可以是 cpucore的 2~3倍
  7. 任务的并行执行,一个hivesql 可能会转为多个mr,每一个job就是一个stage。Job执行顺序可以再日志看到,但是如果job之间没有依赖关系 可以并行执行。但是并行执行量力而行,集群资源小,反而会使job抢占资源导致性能下降。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值