hadoop中的作业客户端如何计算inputSplits

时间:2013-04-18 08:56:49

标签: hadoop mapreduce

我正在努力获得地图缩减架构的洞察力。我正在查阅这篇http://answers.oreilly.com/topic/2141-how-mapreduce-works-with-hadoop/文章。我对mapreduce框架的JobClient组件有一些疑问。我的问题是:

JObClient如何计算数据的输入拆分?

根据我咨询的内容,Job Client计算在运行作业时指定的HDFS上的输入路径中的数据的输入拆分。文章说,然后Job Client将资源(jar和compued输入拆分)复制到HDFS。现在我的问题是,当输入数据在HDFS中时,为什么jobClient会将计算出的输入分段复制到HDFS中。

让我们假设Job Client将输入拆分复制到HDFS,现在当JOb被提交到Job Tracker并且Job跟踪器为什么从HDFS检索输入拆分时,它会将作业重新填入?

如果我的问题不明确,请道歉。我是初学者。 :)

2 个答案:

答案 0 :(得分:0)

没有JobClient不会将输入拆分复制到HDFS。你已经引用了自己的答案:

  

Job Client计算位于输入路径中的数据的输入拆分   在运行作业时指定的HDFS上。文章说那时约伯   客户端将资源(jar和计算输入拆分)复制到HDFS。

输入本身依赖于群集。客户端仅计算从namenode获得的元信息(块大小,数据长度,块位置)。这些computed输入拆分将元信息传递给任务,例如。块偏移量和要计算的长度。

查看org.apache.hadoop.mapreduce.lib.input.FileSplit,它包含文件路径,起始偏移量和单个任务将作为输入操作的块的长度。 您可能还需要查看的可序列化类是:org.apache.hadoop.mapreduce.split.JobSplit.SplitMetaInfo

将为将要运行的每个任务计算此元信息,并将其与jar一起复制到将实际执行此任务的节点。

答案 1 :(得分:0)

输入分割的计算取决于输入格式。对于典型的文本输入格式,计算拆分大小的通用公式为

  max(mapred.min.split.size, min(mapred.max.split.size, dfs.block.size))

或默认

输入拆分大小= mapred.min.split.size< dfs.block.size< mapred.max.split.size

其中
     mapred.min.split.size =最小分割尺寸
     mapred.max.split.size - 最大分割尺寸
     dfs.block.size = DFS块大小

对于DB输入格式,分割尺寸为
  (总记录/映射器数量)

如上所述,输入分割和大小的数量是给予映射器任务和记录阅读器的元信息。