1. 本地模式
1. 什么是本地模式
hive 默认会将所有任务,提交到yarn上执行,由yarn负责整个job的调度与监控
当数据集非常小时(只有一个block,只存在一个datanode节点上),提交job的时间 将远大于 job运行的时间,
此时可以开启本地模式,将job在本地运行,不提交到yarn上
避免了和yarn的交互,大大提高了数据计算的效率
2. 使用场景
数据集非常小时(比如 只有一个block的数据),数据量越小,优化效果越明显
3. 开启本地模式(参数设置)
--为true,表示 让hive 自行判断是否将任务在本地运行(默认为 false,不开启) --判断条件 : 1.输入数据量 2.输入文件个数 set hive.exec.mode.local.auto=true; --输入字节数 小于设置值时, 任务为本地运行 --默认值 134217728Bytes = 128M (根据实际环境block大小设置) --可根据 set dfs.blocksize 查看 set hive.exec.mode.local.auto.inputbytes.max=50000000; --输入文件个数(MapTask) 小于设置值时, 任务为本地运行 --默认值 4 set hive.exec.mode.local.auto.input.files.max=10;
set mapreduce.job.reduces=1; -- 注意将reduce个数设置为1 才会生效
4.测试
-- yarn模式(可以在yarn上看到提交的job)
select name,count(friend) from maptab group by name;
Time taken: 13.372 seconds, Fetched: 3 row(s)
-- 本地模式(无法在yanr上看到提交的job)
set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=50000000;
set hive.exec.mode.local.auto.input.files.max=10;
select name,count(friend) from maptab group by name;
Time taken: 1.733 seconds, Fetched: 3 row(s)