问题导读
1.如何开启Fetch?
2.哪些情况下,hive执行不使用MapReduce?
3.本地模式适用于什么情况?
4.小表与大表新版本是否需要优化?
5.大表与大表空值比较多该如何优化?
6.如何在Map端join?
7.动态分区的作用是什么?
8.数据倾斜有哪些措施?
9.严格模式你认为什么情况下会用到?
1.Fetch抓取
- set hive.fetch.task.conversion=more(默认)
Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。该属性设置为 more 以后,在全局查找、字段查找、limit 查找等都不走 MapReduce。 设置为none后所有类型的查找语句都要走MapReduce;
例如:
1 查询所有员工的所有信息
hive> select * from emp;
OK
1001.0 Tome null 5000.0 10.0
1002.0 Tome null 5000.0 10.0
7369.0 SMITH CLERK 4800.0 20.0
Time taken: 3.664 seconds, Fetched: 16 row(s)
2、查询员工信息:员工号 姓名 月薪
hive> select empno,ename,sal from emp;
OK
1001.0 Tome 5000.0
1002.0 Tome 5000.0
Time taken: 0.166 seconds, Fetched: 16 row(s)
3、查询员工信息:员工号 姓名 月薪 年薪
hive> select empno,ename,sal,sal*12 from emp;
OK
1001.0 Tome 5000.0 60000.0
1002.0 Tome 5000.0 60000.0
Time taken: 0.184 seconds, Fetched: 16 row(s)
2.本地模式
- set hive.exec.mode.local.auto=true(开启本地模式)
Hive 可以通过本地模式在单台机器上 处理所有的任务。对于小数据集,执行时间可以明显被缩短,本地模式只能运行一个reducer
①开启本地模式后需要设置local mr的最大输入数据量,当数据量小于这个值时采用local mr的方式
set hive.exec.mode.local.auto.inputbytes.max=134217728(默认)
②开启本地模式后需要设置local mr的最大输入文件个数,当数据量小于这个值时采用local mr的方式
set hive.exec.mode.local.auto.input.files.max=4(默认)
上面是开启的自动本地模式,Hive通过条件判断是否通过本地模式运行mapreduce任务。
当然也有完全本地模式,需要开启下面选项