0

这个问题不是重复的: Hadoop 进程记录如何跨块边界拆分?

我有一个关于输入拆分计算的问题。根据 hadoop 指南

1) InputSplits 尊重记录边界

2)同时它说拆分是由Job Submitter计算的。我假设它在客户端运行。[MapReduce 作业运行剖析 - 经典 MRv1]

这是否意味着:

(a) 作业提交者读取块来计算输入拆分?如果是这种情况,那么它不会是非常低效的,并且不会达到 hadoop 的目的。

或者

(b) 作业提交者是否仅根据块大小和位置计算拆分,这仅仅是基于块大小和位置的估计,然后它是否成为 InputFormat 和 RecordReader 在映射器下运行以获取跨越主机边界的记录的责任。

谢谢

4

1 回答 1

0

(a) 作业提交者读取块来计算输入拆分?如果是这种情况,那么它不会是非常低效的,并且不会达到 hadoop 的目的。

我不这么认为。作业提交者应该从名称节点中读取块的信息,然后只进行计算,不应该占用太多的计算资源。

(b) 作业提交者是否仅根据块大小和位置计算拆分,这仅仅是基于块大小和位置的估计,然后它是否成为 InputFormat 和 RecordReader 在映射器下运行以获取跨越主机边界的记录的责任。

我不确定提交者的计算有多准确,但拆分大小是根据配置的最小和最大拆分大小以及使用此等式的块大小计算的

最大(最小分割尺寸,最小(最大分割尺寸,块尺寸))

所有这些值都可以由用户设置。例如,最小拆分大小可以是 1,最大值可以是最大长值 (9223372036854775807)。

正确 - InputFormat 中的记录是一个逻辑概念。这意味着作为开发人员在开发 map reduce 代码时,我们不需要考虑将一条记录分成 2 个不同拆分的情况。记录读取器负责通过远程读取读取缺失的信息。这可能会导致一些开销,但通常是轻微的。

于 2014-08-04T10:40:33.057 回答