1.hive优化基础1
开启分桶 set hive.enforce.bucketing=true;
设置reduce个数 set mapreduce.job.reduces=3;
-
hive表 ->orc和parquet -->ZLIB或snappy Parquet是面向分析型业务的列式存储格式
-
fetch抓取: 在全局找、字段查找、limit查找等都不走mapreduce. set hive.fetch.task.conversion=more;默认为 none.
-
本地模式 :
a. set hive.exec.mode.local.auto=true;
b. 调节本地模式阈值set hive.exec.mode.local.auto.inputbytes.max=51234560;默认为128M.
c. 设置local mr的最大输入文件个数 set hive.exec.mode.local.auto.input.files.max=10; 默认 为4. -
大表join小表 map join 优化
a. set hive.auto.convert.join = true; – 默认为true
b. 小表阈值设置 : set hive.mapjoin.smalltable.filesize= 25000000; 默认25M. -
大表join 大表 :
a. 空key过滤
优化前: SELECT a.* FROM nullidtable a JOIN ori b ON a.id = b.id;
优化后: SELECT a.* FROM (SELECT * FROM nullidtable WHERE id IS NOT NULL ) a JOIN ori b ON a.id = b.id;
b. 空key 转换
有时虽然某个key为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的reducer上
不随机分补:
SELECT a.*
FROM nullidtable a
LEFT JOIN ori b ON CASE WHEN a.id IS NULL THEN ‘hive’ ELSE a.id END = b.id;
随机分布:
SELECT a.*
FROM nullid