Hadoop:基于簇大小的可用映射槽数

时间:2013-05-06 17:04:31

标签: hadoop mapreduce mapper

读取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

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

3 个答案:

答案 0 :(得分: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(),您可以访问以下信息:

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

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

答案 1 :(得分: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?也有一些好的答案

答案 2 :(得分:0)

主要是InputFormat找到号码的义务。映射器,它是基于由InputFormat类的InputSplits方法内部编写的逻辑创建的getSplits(JobContext context)完成的。指定号码。 mappers通过Job或配置文件或通过shell指定它只是对框架的提示,并不保证你总是只得到指定的no。地图集。