文章目录
- 本地模式
- 用案例测试本地模式的效果
- 创建普通表
- 加载数据到普通表
- 创建分桶表
- 查询普通表数据插入分桶表
- 记录关闭本地模式的插入数据用时
- 记录开启本地模式的插入数据用时
- 记录关闭本地模式的查询数据用时
- 记录开启本地模式的查询数据用时
- 总结
本地模式
当数据量很大时,Hadoop Job是通过集群来处理大数据集的,这样可以充分发挥分布式计算的优势。
但是有时候数据量很小的时候,原来的优化反而成了劣势,因为在数据量小的情况下,触发执行任务所消耗的时间比job执行的时间还要多得多,对于这种情况,Hive可以通过本地模式在单台机器处理所有任务,对于小数据集,执行时间可以明显缩短
用户可以通过设置hive.exec.mode.local.auto=true
,让Hive在适当的时候自动启动这个优化
--开启本地mr
set hive.exec.mode.local.auto=true;
--设置local mr的最大输入数据量,当输入数据量小于这个值时采用local
--mr的方式,默认为134217728,即128M
set hive.exec.mode.local.auto.inputbytes.max=51234560;
--设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local
--mr的方式,默认为4
set hive.exec.mode.local.auto.input.files.max=10;
用案例测试本地模式的效果
创建普通表
create table score2
(
id string,
cid string,
score string
)
row format delimited
fields terminated by ' '
加载数据到普通表
load data local inpath '/export/testdatas/score.txt' into table score2
创建分桶表
create table score
(
id string,
cid string,
score string
)
clustered by (id) into 3 buckets
row format delimited
fields terminated by ' '
查询普通表数据插入分桶表
分桶表的数据无法通过
hdfs dfs -put
文件或者load data
加载
只能通过insert into 或insert overwrite
insert overwrite table score
select * from score2 cluster by id;
记录关闭本地模式的插入数据用时
花费时间: 1分49秒
记录开启本地模式的插入数据用时
花费时间: 37s
记录关闭本地模式的查询数据用时
花费用时: 35秒
记录开启本地模式的查询数据用时
花费用时: 1秒
总结
在数据量小的时候,不论是插入数据还是查询数据时,开启本地模式后,任务的执行时间都大幅缩短
插入数据时缩短三分之二的执行时间
查询数据效果更为明显,从35s缩短到1s
在Hive调优时可以开启这个参数,缩短小数据量的任务执行时间