深入浅出数据仓库中SQL性能优化之Hive篇忽略元数据末尾添加者:邓昌甫/GFZQ,最后更新者:邓昌甫/GFZQ于九月24,2015回到原数据开始处摘要:Hive查询生成多个mapreducejob,—个mapreducejob又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化,针对MR全局的优化以及针对整个查询的优化
一个Hive查询生成多个MapReduceJob,—个MapReduceJob又有Map,Reduce,Spill,Shuffle,Sort等多个阶段,所以针对Hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MRJob)的优化,下文会分别阐述
在开始之前,先把MR的流程图帖出来(摘自Hadoop权威指南),方便后面对照
另外要说明的是,这个优化只是针对Hive0
9版本,而不是后来Hortonwork发起Stinger项目之后的版本
相对应的Hadoop版本是1
Map阶段的优化(Mapphase)Map阶段的优化,主要是确定合适的Map数
那么首先要了解Map数的计算公式:[js]viewplaincopy1
num_Map_tasks=max[${Mapred
size},2
min(${dfs
size},${Mapred
size})]•Mapred
size指的是数据的最小分割单元大小
•Mapred
size指的是数据的最大分割单元大小
size指的是HDFS设置的数据块大小
[js]viewplaincopy1
Hive>setdfs
size;2