真正让你明白Hive参数调优系列2:如何控制reduce个数与参数调优

相比map个数的控制复杂性,reduce个数的设定要相对简单多了,reduce的个数一般最后决定了输出文件的个数,二者相等,如果想多输出文件的个数(这样文件变小,但有可能程序变慢),那么可以人为增加reduce个数。如果想减少文件个数,也可以手动较少reduce个数(同样可能程序变慢)。但实际开发中,reduce的个数一般通过程序自动推定,而不人为干涉,因为人为控制的话,如果使用不当很容易造成结果不准确,且降低执行效率。

1.控制reduce个数的方式与参数

1.1.首先可以通过参数直接控制最终reduce的个数,使用参数mapred.reduce.tasks

hive> set mapred.reduce.tasks ;
mapred.reduce.tasks=-1   --我们公司使用的官方默认值-1,表示不人为设置reduce的个数,实际这种方式用的也少。

1.2.在hive中如果不指定reduce个数的情况下,Hive会猜测确定一个reduce个数,基于以下两个设定

1.set hive.exec.reducers.bytes.per.reducer=300000000  --我们公司默认值 300Mb
 注意:在hive 0.14.0之前默认hive.exec.reducers.bytes.per.reducer默认值是1Gb,每个reduce最多处理1Gb。
 但是在之后版本默认值都是256Mb.这里我们公司用的是300Mb。为什么300Mb写的是300*1000*1000?因为网络传输中用的1000,而不是1024机制。
2.set hive.exec.reducers.max=1009    --我们公司默认值,这个值一般不会修改。
 注意,在hive 0.14.0之前默认是999,之后是1009,所以我们公司的也是官方默认值。
 
3.reduce计算方式:计算reducer数的公式很简单
Num=min(hive.exec.reducers.max2,map输出数据量/hive.exec.reducers.bytes.per.reducer)

2.案例演示控制reduce个数的方法

0.数据准备

    这里文件大表的大小为23.4G,存储为22个文件,平均每个文件大小都在1.1G左右。小表的文件2个,合计58Mb.

[finance]$ hadoop fs -count hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d
1           22        25154158871 hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d
-----------------------------------------------------------------------------------------------------------------------------------
[finance]$ hadoop fs -du -s -h hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d
23.4 G  hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d
-----------------------------------------------------------------------------------------------------------------------------------
[finance]$ hadoop fs -du -h hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d
1.1 G  hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d/000000_0
1.1 G  hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d/000001_0
...............................

2.1通过hive.exec.reducers.bytes.per.reducer控制reduce个数<

你可能感兴趣的:(hive)