9.企业级调优
9.1 Fetch 抓取
- Fetch 抓取:Hive 中对某些情况的查询可以不必使用 MapReduce 计算;
hive.fetch.task.conversion:more
9.2 本地模式
- 大多数的 Hadoop Job 是需要 Hadoop 提供完整的可扩展性来处理大数据集的。不过,有时 Hive 的输入数据量是非常小的。在这种情况下,为查询触发执行任务消耗的时间可能会比实际job的执行时间要多的多。对于大多数这种情况,Hive 可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。
hive.exec.mode.local.auto:true
9.3 表的优化
9.3.1 小表Join大表
- 实际测试发现:新版的 hive 已经对小表JOIN大表和大表JOIN小表进行了优化,小表放在左边和右边已经没有明显区别;
9.3.2 大表Join大表
- 第一种方式:查询之前,过滤Null
select n.* from (select * from nullidtable where id is not null) n left join bigtable o on n.id = o.id;
- 第二种方式:给Null的赋值
- 需要避免数据倾斜,所以使用
rand()
;
select n.* from nullidtable n full join bigtable o on case when n.id is null then concat(‘hive‘, rand()) else n.id end = o.id;
9.3.3 MapJoin
- 如果不指定 MapJoin 或者不符合 MapJoin 的条件,那么 Hive 解析器会将 Join 操作转换成 Common Join,即:在Reduce阶段完成join,容易发生数据倾斜。可以用 MapJoin 把小表全部加载到内存,在 map 端进行 join,避免 reducer 处理。
- 开启
MapJoin
参数设置:
Hive 企业调优
原文:https://www.cnblogs.com/linkworld/p/11066416.html