Java 在给定一组指定数据的情况下,什么决定了要使用的映射器/还原器的数量

Java 在给定一组指定数据的情况下,什么决定了要使用的映射器/还原器的数量,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,哪些因素决定了为实现最佳性能而对给定数据集使用的映射器和还原器的数量?我说的是Apache Hadoop Map Reduce平台。主要是,映射程序的数量取决于该方法生成的数据量。特别是FileInputSplit会根据块和文件拆分输入目录。gzip文件不会拆分,整个输入文件将传递给1个映射器 Two files: f1 [ block1, block2], f2 [block3, block4] becomes 4 mappers f1(offset of block1), f1(of

哪些因素决定了为实现最佳性能而对给定数据集使用的映射器和还原器的数量?我说的是Apache Hadoop Map Reduce平台。

主要是,映射程序的数量取决于该方法生成的数据量。特别是FileInputSplit会根据块和文件拆分输入目录。gzip文件不会拆分,整个输入文件将传递给1个映射器

Two files:
f1 [ block1, block2], 
f2 [block3, block4] 
becomes 4 mappers 
f1(offset of block1), 
f1(offset of block2), 
f2(offest of block3),
f2(offset of block4)
其他InputFormat有自己的文件分割方法,例如Hbase在区域边界上分割输入

除非使用,否则无法有效控制映射程序。但大多数映射程序应该在数据驻留的主机上执行

在大多数情况下,由用户指定的减少数量。这主要取决于需要在减速器中完成的工作量。但它们的数量不应该很大,因为映射器使用算法在还原器之间分配数据。 有些框架,比如Hive,可以使用每个减速机1GB的经验输出来计算减速机的数量


一般经验法则:每个reducer使用1GB,但不能超过集群容量的0.8-1.2。

主要是,映射器的数量取决于该方法生成的数据量。特别是FileInputSplit会根据块和文件拆分输入目录。gzip文件不会拆分,整个输入文件将传递给1个映射器

Two files:
f1 [ block1, block2], 
f2 [block3, block4] 
becomes 4 mappers 
f1(offset of block1), 
f1(offset of block2), 
f2(offest of block3),
f2(offset of block4)
其他InputFormat有自己的文件分割方法,例如Hbase在区域边界上分割输入

除非使用,否则无法有效控制映射程序。但大多数映射程序应该在数据驻留的主机上执行

在大多数情况下,由用户指定的减少数量。这主要取决于需要在减速器中完成的工作量。但它们的数量不应该很大,因为映射器使用算法在还原器之间分配数据。 有些框架,比如Hive,可以使用每个减速机1GB的经验输出来计算减速机的数量


一般经验法则:每个reducer使用1GB,但不能超过集群容量的0.8-1.2。

根据Cloudera

是否设置了映射器和还原器的最佳数量? 默认情况下,映射器的数量设置为每个HDFS块一个。这通常是一个很好的默认值,但请参见技巧2。 减速器的数量最好设置为集群中减速器插槽的数量减去几个以允许出现故障。这允许减速器在一个波中完成


根据Cloudera的说法

是否设置了映射器和还原器的最佳数量? 默认情况下,映射器的数量设置为每个HDFS块一个。这通常是一个很好的默认值,但请参见技巧2。 减速器的数量最好设置为集群中减速器插槽的数量减去几个以允许出现故障。这允许减速器在一个波中完成


这完全取决于你想要处理的数据和你想要处理的时间data@zuxqoj-如果你能用一个例子来解释,那就太好了。这完全取决于你想要处理的数据和你想要处理的时间data@zuxqoj-如果你能解释一下就好了在一个例子的帮助下,@octo-I希望得到一个答案,即给定一组数据时,使用的映射器和还原器的最佳数量是多少。我想这应该与集群容量有关,以确保最佳集群利用率,网络带宽也可能是其中一个参数。我在这些线上寻找一些东西。我给了你答案。制图员数量主要取决于输入数据的布局。正如我所说的:每个减速机1GB。大多数映射器都能很好地处理相同数量的数据,但在大多数集群上,块大小为64-256MB,因此每个映射器接收1个块。这个数字是任务启动成本和慢任务概率之间的平衡。映射器的数量不应该和集群的容量有关,这些数量应该最大限度地减少网络/io的使用。减缩器不应超过群集容量。@octo-您的答案现在似乎更清楚了。我猜每个映射器都会得到一个块,因为HDFS保证在单个节点上存在最大为一个块大小的数据,并且如果映射任务在该节点上运行,则由于数据位置的原因,可以保存网络I/o。谢谢你的回答。无论如何,还原器应该与集群中还原槽的数量成正比。@octo-I希望得到一个答案,即给定一组数据时,使用的映射器和还原器的最佳数量是多少。我想这应该与集群容量有关,以确保最佳集群利用率,网络带宽也可能是其中一个参数。我在这些线上寻找一些东西。我给了你答案。制图员数量主要取决于输入数据的布局。正如我所说的:每个减速机1GB。制图员,
大多数情况下,数据量相同,但在大多数集群上,块大小为64-256MB,因此每个映射器接收1个块。这个数字是任务启动成本和慢任务概率之间的平衡。映射器的数量不应该和集群的容量有关,这些数量应该最大限度地减少网络/io的使用。减缩器不应超过群集容量。@octo-您的答案现在似乎更清楚了。我猜每个映射器都会得到一个块,因为HDFS保证在单个节点上存在最大为一个块大小的数据,并且如果映射任务在该节点上运行,则由于数据位置的原因,可以保存网络I/o。谢谢你的回答。无论如何,reducer应该与集群中reduce插槽的数量成正比。我猜将映射器的数量设置为每个HDFS块一个是因为HDFS保证在单个节点上存在最大为一个块大小的数据,并且如果映射任务在该节点上运行,则可以在到期时保存网络I/o数据局部性。无论如何,我可以接受你的答案,非常感谢。是的,你的理解是正确的。这个建议对于超过10台主机的集群是错误的。还原器应设置为输出数据量,而不是群集容量。群集容量应为上限。例如,如果mapred.reduce.slowstart.completed.maps低0.05,则尤其如此。如果您为来自映射器的输出数据设置1500个还原器(比如1GB),您将得到:1500xMappers http请求和数据下载。您可以在集群中获得1500xMappers小文件。我猜将映射器的数量设置为每个HDFS块一个是因为HDFS可以保证单个节点上存在最大为一个块大小的数据,并且如果映射任务在该节点上运行,则由于数据位置的原因,可以保存网络I/o。无论如何,我可以接受你的答案,非常感谢。是的,你的理解是正确的。这个建议对于超过10台主机的集群是错误的。还原器应设置为输出数据量,而不是群集容量。群集容量应为上限。例如,如果mapred.reduce.slowstart.completed.maps低0.05,则尤其如此。如果您为来自映射器的输出数据设置1500个还原器(比如1GB),您将得到:1500xMappers http请求和数据下载。您可以在集群中获得1500xMappers小文件。