hive可以有很多方法进行调优,具体方法如下:
本地模式:
当要处理的数据很小时,完全分布式的启动时间比作业时间要长时,可以使用本地模式
-- 通过以下设置开启本地模式
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
当reduce的总数为1或者0时才可以使用
并行模式(没有依赖关系):
上一个mapreduce的输出结果和下一个mapreduce的输出结果没有依赖关心, 才可以使用
它们可以并行运行以节省总体作业运行时间
如果集群的利用率已经很高,并行执行帮助不大
-- 通过以下设置开启并行执行
SET hive.exec.parallel=true; -- default false
SET hive.exec.parallel.thread.number=16; -- default 8,
定义并行运行的最大数量
开启Jvm重用:
通过共享jvm来重用jvm,以串行的方式运行Mapreduce job ,适合与同一个job中的map或者reduce任务
-- 通过以下设置开启JVM重用
set mapred.job.reuse.jvm.num.tasks = 5; -- 默认值为1
严格模式:开启严格模式
对于语法不规范的语句不予以执行。
Fetch抓取,避免运行mapreduce程序
防止数据倾斜:
set hive.optimize.skewjoin=true;
Explain 根据语法树,进行语句优化
合理设置map(设置切片和块的大小)和reduce的数量