1

我正在尝试了解 map reduce 架构。我正在咨询这篇http://answers.oreilly.com/topic/2141-how-mapreduce-works-with-hadoop/文章。我对 mapreduce 框架的组件 JobClient 有一些疑问。我的问题是:

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

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

让我们假设 Job Client 将输入拆分复制到 HDFS,现在当 JOb 提交给 Job Tracker 和 Job Tracker 时详细说明作业为什么它从 HDFS 检索输入拆分?

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

4

2 回答 2

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 Input Format,拆分大小为
(总记录数/映射器数)

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

于 2013-04-18T14:58:41.200 回答
0

不,JobClient 不会将输入拆分复制到 HDFS。您已经为自己引用了答案:

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

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

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

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

于 2013-04-18T09:10:13.857 回答