1

HIVE面试题

HIVE 优化:

场景1. 分组聚合group by 导致数据倾斜 -- map端聚合 :

aggr=true

  1. 会在mapper端先group by一次,最后再把结果merge起来,为了减少reducer处理的数据量
  2. 指令: Set hive.groupby.mapaggr.checkinterval=1000000
    Set hive.map.aggr = true
    set hive.groupby.skewindata=true; --启用分组聚合数据倾斜优化

场景2. 大表和小表join 导致的数据倾斜. 将小表广播到内存中不进行shuffle

  --启用map join自动转换
  set hive.auto.convert.join=true;

image

场景3. 两张大表 join 发生数据倾斜[SMB JOIN]

   使用分桶表,并且开启SMB Join (Sort Merge Bucket Join)
   set hive.optimize.bucketmapjoin = true;
   set hive.optimize.bucketmapjoin.sortedmerge = true;
   set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

	关联键空值很多情况

SELECT ...
FROM (
SELECT *
FROM tbl1
WHERE ds = '${cur_date}'
) a
LEFT OUTER JOIN (
SELECT *
FROM tbl1
WHERE ds = '${cur_date}'
) b
ON coalesce(a.id,rand() * 9999) = b.id -- 通过coalesce对空值进行随机分发,避免聚集

场景4. 小文件合并优化

  合并Map端输入的小文件,是指将多个小文件划分到一个切片中,进而由一个Map Task去处理。目的是防止为单个小文件启动一个Map Task,浪费计算资源。

  --可将多个小文件切片,合并为一个切片,进而由一个map任务处理
  set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 

#场景5. 谓词下推.

posted @ 2024-07-10 12:29  萌哥-爱学习  阅读(13)  评论(0编辑  收藏  举报