干货 | HIVE表常用操作大全(二)

1. 动态分区插入

set hive.exec.dynamici.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table xxx.xxx partition (pline_form, os_type, dt)

2. 动态插入的分区数大于100

SET hive.exec.max.dynamic.partitions=2000;
SET hive.exec.max.dynamic.partitions.pernode=2000;

3. 修改最小文件merge大小

set hive.merge.mapredfiles=true;
set hive.merge.smallfiles.avgsize=268435456;

4. 修改reduce task数

set mapred.reduce.tasks=2099;

5. 并行执行

即控制对于一个sql来说同时可以运行的job的最大值.该参数默认为8,此时最大可以同时运行8个job

set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=10;

找了个job比较多的sql,task id是1430403,是这个任务中的最后一个sql,是n个sql一起的union操作
通过修改参数hive.exec.parallel和hive.exec.parallel.thread.number测试了下不同情况的执行速度
其中hive.exec.parallel.thread.number表示同时运行的job的个数

不开并行:2533.722 seconds
开并行,并行度为8:266.82 seconds
开并行,并行度为16:194.33 seconds
开并行,并行度为32:133.117 seconds

当并行度为32的时候,速度提升了将近20倍,但是会占用更多的map和reduce资源

6. MapJoin机制

mapjoin的适用场景如关联操作中有一张表非常小,不等值的链接操作.即:

在二个要连接的表中,有一个很大,有一个很小,这个小表可以存放在内存中而不影响性能。这样我们就把小表文件复制到每一个Map任务的本地,再让Map把文件读到内存中待用。

hive 0.12版本后默认hive.auto.conver.join=true,即默认开启优化.

set hive.auto.convert.join=false;

7. 修改队列

set mapreduce.job.queuename=root.yarn.test;

8. 其它参数

set spark.executor.memory=16g;
set spark.yarn.executor.memoryOverhead=6144m;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值