(六)hive优化详解
每个join基本都会触发一个reduce操作。explnin sql查看某sql的具体执行方式
1:多表关联优化:
开启map join
适用情况:多表进行关联时,所有表中只有一张表小表,此时将小表加载到内存,在map端完成连接过程,忽略了reduce操作,提高运行效率,提升20%左右性能。此时设置参数为true.开启此种优化,默认false。小表判断,默认<25M。但是不支持各种外连接使用此种优化!
hive0.1之后默认开启。set hive.auto.convert.join=true
2:开启本地模式
将hive的Job交给yarn执行太慢,hive支持本地模式
set hive.exec.mode.local.auto=true;默认为false
3:调整mapper和reduce的个数
reduce个数:由数据量大小来决定,每个reduce处理的数据量默认1G
reduce个数调整方式1:
hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)
hive.exec.reducers.max(每个任务最大的reduce数,默认为999)
调整reduce个数方法二;
set mapred.reduce.tasks = 15;
map的数量:通常是由hadoop集群的DFS块大小确定的,也就是输入文件的总块数,正常的map数量的并行规模大致是每一个Node是 10~100个,对于CPU消耗较小的作业可以设置Map数量为300个左右。
4:设置JVM重用
在hadoop的mapred-site.xml文件中进行参数设置。