Hadoop的:基于簇大小

问题描述:

读通过的Hadoop所产生的日志,我可以看到类似这样的行可用的地图插槽数..Hadoop的:基于簇大小

2013-05-06 16:32:45,118 INFO org.apache.hadoop.mapred.JobClient (main): Setting default number of map tasks based on cluster size to : 84 

有谁知道这个值是如何计算的? 如何在我的程序中获得此值?

+0

您正在使用哪种Hadoop版本?您是否在AWS上使用Amazon Elastic MapReduce? – harpun 2013-05-06 17:59:45

+0

是的,我在AWS上使用Amazon Elastic MapReduce。 Hadoop版本1.0.4 – Matteo 2013-05-06 18:32:25

所以这是根据您的输入大小默认设置的。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces。您可以指定更多的映射器,但不能少于hadoop定义的数量。

您应该可以通过获取配置选项“mapred.map.tasks”来访问此编号。如果你使用旧的API,你也可以从这个函数中获取它。

conf.getNumMapTasks(); 

这个前面的问题,How to set the number of map tasks in hadoop 0.20?,有一些很好的答案,以及

这主要是InputFormat的责任找到了没有。的映射器,它是基于由您的InputFormat类的getSplits(JobContext context)方法编写的逻辑创建的InputSplits完成的。指定no。通过Job或配置文件映射器或通过shell指定它只是提示框架,并不能保证你总能得到指定的no。的mappers。

+0

我不认为这个问题是关于否。工作需要的mappers。问题是关于一个集群可以处理的同时映射器的数量。 – ernesto 2014-11-11 11:51:39

我grepped Hadoop的源代码,并没有找到字符串Setting default number of map tasks based on cluster size to在所有(但我发现其他字符串,正在打印时运行MR作业)。此外,这个字符串不会被打印在本地安装的任何地方。谷歌搜索它列出了AWS与EMR的问题。 如您所确认的,您实际上使用Amazon Elastic MapReduce。我相信EMR对类Hadoop有一些自己的修改,它会输出这个特定的行。

就计算这个数字而言,我怀疑它是根据像total number of (active) nodes in cluster (N)number of map slots per node (M)这样的特征,即N*M来计算的。但是,也可能会考虑其他AWS特定的资源(内存)限制。您必须在EMR相关论坛中询问确切的公式。另外,JobClient公开了关于集群的一组信息。使用方法JobClient#getClusterStatus()可以访问如下信息:

  • 集群的大小。
  • 追踪器的名称。
  • 列入黑名单/活动跟踪器的数量。
  • 群集的任务容量。
  • 当前正在运行的地图数&减少任务。

通过ClusterStatus类对象,因此您可以尝试手动计算您的程序中所需的数字。

+0

这似乎很有用,但'JobClient'属于旧包'org.apache.hadoop.mapred',我试图弄清楚如何从org.apache.hadoop.mapreduce中获得'JobClient'。工作'对象。 我也发现'org.apache.hadoop.mapred.JobTracker'类有'getClusterMetrics()'方法。它返回我需要的信息..但又没有找到一种方法来获取此对象的一个​​实例。 – Matteo 2013-05-07 11:46:08

+1

我认为你在这里使用'JobClient'。或者,您可以尝试通过JMX访问JobTracker。不过,我不确定它是否会提供所有需要的指标。在hadoop 2.0中检索更容易。看看[示例](https://github.com/apache/hadoop-common/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop /examples/pi/DistSum.java)附带hadoop的源代码(第391,405行)。它使用Cluster#getClusterStatus()来获取一个'ClusterMetrics'实例。 'Cluster'实例是通过像JobClient这样的URL来构造的。 – harpun 2013-05-07 20:43:54