您现在的位置:文学书籍 > 儿童诗歌

Hive中reduce个数设定

发布时间:2019-08-13 11:53编辑:本站原创阅读(99)

    	Hive中reduce个数设定

    我们每次执行hive的hql时,shell里都会提示一段话:[python]这个是调优的经常手段,主要有一下三个属性来决定Thiscontrolshowmanyreducersamap-reducejobshouldhave,_file_sizedividedby""isgreaterthanthisvalue,serthrough""andqueryhintsThisoverridesthehadoopconfigurationtomakesurewee,thenhivewillpa的个数设置其实对执行效率有很大的影响:1、如果reduce太少:如果数据量很大,会导致这个reduce异常的慢,从而导致这个任务不能结束,也有可能会OOM2、如果reduce太多:产生的小文件太多,合并起来代价太高,namenode的内存占用也会增大。

    如果我们不指定hive会自动计算需要多少个reducer。 计算的公式:这个数个粗略的公式,详细的公式在:common/src/java/org/apache/hadoop/hive/conf/我们先看下:1、计算输入文件大小的方法:其实很简单,遍历每个路径获取length,累加。

    [python]2、估算reducer的个数,及计算公式:注意最重要的一句话:[python][python]这就是reduce个数计算的原理。 Bytheway:今天中午在群里看到一位朋友问到:当前hive的reduce个数的设定是依据map阶段输入的数据量大小来除以每一个reduce能够处理的数据量来决定有多少个的,但是考虑到经过map阶段处理的数据很可能可输入数据相差很大,这样子的话,当初设定的reduce个数感觉不太合理。

    。 。

    请问hive当前能支持依据map阶段输出数据量的大小决定reduce个数么?(但是,reduce任务的开启是在有某些map任务完成就会开始的,所以要等到所有map全部执行完成再统计数据量来决定reduce个数感觉也不太合理)有没有什么好方法?谢谢这个问题的大意是,reducer个数是根据输入文件的大小来估算出来的,但是实际情况下,Map的输出文件才是真正要到reduce上计算的数据量,如何依据Map的阶段输出数据流觉得reduce的个数,才是实际的问题。

    我给出的思路是:1、hack下源码,计算下每个map输出的大小map个数不就估算出map总共输出的数据量了吗?不用等它结束,因为每个map的处理量是一定的。 2、你把源码的总输入量/每个reduce处理量改成总输出量/每个reduce处理量不就行了?(总输出=每个Map输出文件的大小map个数)Ps:最后朋友提到:建议不错,虽然有一定误差。 谢谢。

    不过,如果filter push down的话,每一个map的输出大小差别可能比较大。 。 。 而且filter push down 现在应该是hive默认支持的了大意是,还是会有一些误差,谓词下推可能会影响Map的输出大小。

    本文权且当作回顾加备忘,如有不对之处,请高手指正。

    EOFpostedon2018-03-0711:21阅读(550)所属分类:。

    上一篇: SparkSQL相关语句总结

    下一篇:没有了