文章目录

  • 本地模式
  • 用案例测试本地模式的效果
  • 创建普通表
  • 加载数据到普通表
  • 创建分桶表
  • 查询普通表数据插入分桶表
  • 记录关闭本地模式的插入数据用时
  • 记录开启本地模式的插入数据用时
  • 记录关闭本地模式的查询数据用时
  • 记录开启本地模式的查询数据用时
  • 总结



本地模式

当数据量很大时,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秒

hive本地模式的优缺点 hive本地模式为什么会快_学习

记录开启本地模式的插入数据用时

花费时间: 37s

hive本地模式的优缺点 hive本地模式为什么会快_数据_02

记录关闭本地模式的查询数据用时

花费用时: 35秒

hive本地模式的优缺点 hive本地模式为什么会快_数据_03

记录开启本地模式的查询数据用时

花费用时: 1秒

hive本地模式的优缺点 hive本地模式为什么会快_hive本地模式的优缺点_04

总结

在数据量小的时候,不论是插入数据还是查询数据时,开启本地模式后,任务的执行时间都大幅缩短
插入数据时缩短三分之二的执行时间
查询数据效果更为明显,从35s缩短到1s
在Hive调优时可以开启这个参数,缩短小数据量的任务执行时间