此问题与以下内容不重复: How does Hadoop process records split across block boundaries?
我有一个关于输入分割计算的问题。根据hadoop指南
1)InputSplits尊重记录边界
2)同时它说分组是由Job Submitter计算的。我假设在客户端运行。 [MapReduce作业运行剖析 - 经典MRv1]
这是否意味着:
(a)作业提交者读取块来计算输入分割?如果是这种情况,那么它就不会非常低效并且超越了hadoop的目的。
或者
(b)作业提交者是否只根据块大小和位置来计算仅仅是估计值的拆分,然后它成为在Mapper下运行的InputFormat和RecordReader的责任,以获取跨主机边界的记录。
由于
答案 0 :(得分:0)
(a)作业提交者读取块来计算输入分割?如果是这样的话 那么情况就不会非常低效并且打败了它的目的 hadoop的。
我不这么认为。作业提交者应该从名称节点读取块的信息,然后仅进行计算,不应该使用太多的计算资源。
(b)作业提交者是否只计算仅仅是的分割 估计基于块大小和位置,然后它变成 InputFormat和RecordReader的责任在mapper下运行 获取跨越主机边界的记录。
我不确定提交者的计算有多准确,但是分割大小是根据配置的最小和最大分割大小以及使用此等式的块大小计算的
max(minimumSplitSize,min(maximumSplitSize,blockSize))
所有这些值都可以由用户设置。例如,最小分割大小可以是1,最大值可以是最大长值(9223372036854775807)。
正确 - InputFormat中的记录是一种逻辑概念。这意味着当我们开发map reduce代码时,我们不需要考虑将记录分成2个不同的分割的情况。记录阅读器负责通过远程读取读取缺失的信息。这可能会导致一些开销,但通常很轻微。