1

阅读 Hadoop 生成的 syslog,我可以看到与此类似的行。

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

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

4

3 回答 3

3

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

就计算这个数字而言,我怀疑它是根据 和 之类的特征来计算的total number of (active) nodes in cluster (N)number of map slots per node (M)N*M。但是,也可能会考虑其他特定于 AWS 的资源(内存)限制。您必须在与 EMR 相关的论坛中询问确切的公式。

此外,JobClient它还公开了一组有关集群的信息。使用JobClient#getClusterStatus()方法,您可以访问以下信息:

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

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

于 2013-05-06T22:15:44.670 回答
0

找到否决权主要是InputFormat's 的职责。映射器,它是基于由InputFormat 类的InputSplits内部方法编写的逻辑创建的。getSplits(JobContext context)指定编号。通过 Job 或 config 文件或通过 shell 指定映射器只是对框架的提示,并不能保证您总是只得到指定的 no。映射器。

于 2013-05-06T18:38:43.680 回答
0

因此,这是根据您输入的大小默认设置的。 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? ,也有一些很好的答案

于 2013-05-06T17:28:19.393 回答