- 本地模式
-- 通过以下设置开启本地模式
SET hive.exec.mode.local.auto=true; --default false
SET hive.exec.mode.local.auto.inputbytes.max=50000000;
SET hive.exec.mode.local.auto.input.files.max=5; --default 4
Job必须满足以下条件才能在本地模式下运行
- Job总输入大小小于 hive.exec.mode.local.auto. inputbytes.max
- map任务总数小于 hive.exec.mode.local.auto. input.files.max
- 所需的Reduce任务总数为1或0
- 并行模式:上个MapReduce输出的结果不是下一个MR输入
-- 通过以下设置开启并行执行
SET hive.exec.parallel=true; -- default false
SET hive.exec.parallel.thread.number=16; -- default 8,定义并行运行的最大数量
- JVM重用
-- 通过以下设置开启JVM重用
set mapred.job.reuse.jvm.num.tasks = 5; -- 默认值为1
通过JVM重用减少JVM启动的消耗
- 默认每个Map或Reduce启动一个新的JVM
- Map或Reduce运行时间很短时,JVM启动过程占很大开销
- 通过共享JVM来重用JVM,以串行方式运行MapReduce Job
- 适用于同一个Job中的Map或Reduce任务
- 对于不同Job的任务,总是在独立的JVM中运行
- 开启严格模式:
set hive.mapred.mode=strict
- Fetch抓取:有些程序不需要运行mapredcue
- 防止数据倾斜
- group by产生数据倾斜:开启Map端聚合参数设置
- 大表和小表进行join操作:使用mapjoin 将小表加载到内存
- 空值产生的数据倾斜:id为空的不参与关联
- 给空值分配随机的key值:小文件过多或文件过于复杂
- 合理设置Map和Reduce的数量:map设置:主要是设置块大小和切片大小,reduce设置:在driver端设置,在hive中设置
- explain:显示查询语句的执行计划,但不运行
语法:EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] hive_query
EXTENDED
提供执行计划关于操作的额外信息,比如文件路径
DEPENDENCY
提供JSON格式输出,包括查询所依赖的表和分区列表
AUTHORIZATION
列出所有需要授权的实体,包括查询的输入输出和授权失 - 压缩算法:减少传输数据量,会极大提升MapReduce性能
- 查询优化
- 自动启动Map端Join
- 防止数据倾斜:
set hive.optimize.skewjoin=true;