如果我增加映射器的数量并减少减速器的数量,那么执行时任何作业的性能(增加/减少)是否有任何差异?
另外我想问一下如何设置映射器和减速器的数量?我从来没有玩过这个设置,这就是为什么我不知道这个。我知道 hadoop,但我有代码,因为我经常使用 Hive。
此外,如果我想增加映射器和化简器的数量,那么如何设置它以及设置它的值是多少。它是否取决于实例的数量(比如说 10 个)?
请回复我我想试试这个并检查性能。谢谢。
您可以根据块大小和拆分大小增加映射器的数量。最简单的方法之一是减小拆分大小,如下所示:
Configuration conf= new Cofiguration();
//set the value that increases your number of splits.
conf.set("mapred.max.split.size", "1020");
Job job = new Job(conf, "My job name");
更改映射器的数量 - 是纯粹的优化,不应该影响结果。您应该设置 number 以充分利用您的集群(如果它是专用的)。尝试每个节点的映射器数量等于核心数量。查看 CPU 利用率,并增加数量,直到 CPU 利用率几乎达到满,或者系统开始交换。如果您没有足够的内存,您可能需要更少的映射器然后内核。
减速器的数量会影响结果,因此,如果您需要特定数量的减速器(如 1)- 设置它
如果您可以处理任意数量的减速器的结果 - 进行与 Mappers 相同的优化。
从理论上讲,您可以在此调整过程中成为 IO 绑定 - 在调整任务数量时也要注意这一点。尽管映射器/减速器数量增加,但您可以通过低 CPU 利用率来识别它。
我通过修改尝试了@Animesh Raj Jha 的建议,mapred.max.split.size
并获得了显着的性能提升。
我正在使用 hadoop 2.2,并且不知道如何设置最大输入拆分大小我想减小这个值,以便创建更多映射器我尝试更新 yarn-site.xml,但它不起作用
确实,hadoop 2.2 /yarn 不采用以下设置
<property>
<name>mapreduce.input.fileinputformat.split.minsize</name>
<value>1</value>
</property>
<property>
<name>mapreduce.input.fileinputformat.split.maxsiz e</name>
<value>16777216</value>
</property>
<property>
<name>mapred.min.split.size</name>
<value>1</value>
</property>
<property>
<name>mapred.max.split.size</name>
<value>16777216</value>
</property>
最好的