这个问题不是以下问题的重复:Hadoop 处理记录如何跨块边界分割?

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

1) InputSplit 尊重记录边界

2)同时它说分割是由作业提交者计算的。我认为它在客户端运行。[MapReduce 作业运行剖析 - 经典 MRv1]

这是否意味着:

(a) 作业提交者读取块来计算输入分割?如果是这样的话,那么它的效率岂不是非常低下,并且违背了hadoop 的初衷。

或者

(b) 作业提交者是否只计算分割,这只是基于块大小和位置的估计,然后它是否成为在映射器下运行的输入格式和记录读取器的责任,以跨主机边界获取记录。

谢谢

有帮助吗?

解决方案

(a) 作业提交者读取块来计算输入分割?如果是这种情况,那就不会非常效率,并超越了Hadoop的目的。

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

(b)作业提交器是否只是计算出仅基于块大小和位置的估算的拆分,然后才成为iputformat和recordReader在映射器下运行的责任,以获取跨主机边界的记录。

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

最大值(最小分割大小,最小值(最大分割大小,块大小))

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

正确 - 输入格式中的记录是一个逻辑概念。这意味着作为开发人员,当我们开发 MapReduce 代码时,我们不需要考虑一条记录被分成 2 个不同的 split 的情况。记录读取器负责通过远程读取读取缺失的信息。这可能会导致一些开销,但通常很小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top