Hadoop输入拆分大小与块大小

时间:2013-07-18 15:17:04

标签: hadoop mapreduce

我正在通过hadoop权威指南,它清楚地解释了输入分裂。 它就像

  

输入拆分不包含实际数据,而是包含存储   关于HDFS数据的位置

  

通常,输入分割的大小与块大小相同

1)假设一个64MB的块在节点A上,并在其他2个节点(B,C)之间复制,map-reduce程序的输入分割大小为64MB,这将分开只有节点A的位置?或者它是否具有所有三个节点A,b,C的位置?

2)由于数据是所有三个节点的本地数据,框架如何决定(选择)在特定节点上运行的maptask?

3)如果输入分割大小大于或小于块大小,如何处理?

7 个答案:

答案 0 :(得分:25)

  • @ user1668782 的答案是对这个问题的一个很好的解释,我会尝试对其进行图形化描述。

  • 假设我们有一个 400MB 的文件,其中包含 4条记录例如:400 MB的csv文件,它有4条行,每个100MB)

enter image description here

  • 如果HDFS 块大小配置为 128MB ,则4个记录将不会均匀分布在块中。它看起来像这样。

enter image description here

  • 第1块包含整个第一条记录和第二条记录的28MB大小。
  • 如果要在 Block 1 上运行映射器,则映射器无法处理,因为它不会拥有整个第二条记录。
  • 这是输入拆分解决的确切问题。 输入拆分尊重逻辑记录边界。

  • 假设输入拆分尺寸 200MB

enter image description here

  • 因此输入分割1 应该同时包含记录1和记录2.并且输入分割2不会以记录2开始,因为记录2已分配给输入分割1。输入分割2将以记录3开始。

  • 这就是输入拆分只是逻辑块数据的原因。它指向以块为单位的起始位置和结束位置。

希望这有帮助。

答案 1 :(得分:20)

Block是数据的物理表示。 Split是Block中数据的逻辑表示。

可以在属性中更改块和拆分大小。

Map通过拆分从Block读取数据,即拆分充当Block和Mapper之间的代理。

考虑两个方块:

第1座

  

aa bb cc dd ee ff gg hh ii jj

第2区

  

ww ee yy ou oo ii oo pp kk ll nn

现在map将块1读取到aa到JJ,并且不知道如何读取块2,即块不知道如何处理不同的信息块。这里有一个Split它将形成一个Block 1和Block 2的逻辑分组作为单个Block,然后它使用inputformat和record reader形成offset(key)和line(value)并发送map来处理进一步的处理。

如果资源有限且您想限制地图数量,则可以增加分割大小。 例如: 如果我们有640 MB的10个块,即每个64 MB的块和资源有限,那么你可以提到拆分大小为128 MB然后形成128 MB的逻辑分组,并且只执行大小为128 MB的5个映射。

如果我们指定分割大小为false,那么整个文件将形成一个输入分割并由一个映射处理,当文件很大时需要更多时间来处理。

答案 2 :(得分:4)

输入拆分是记录的逻辑划分,而HDFS块是输入数据的物理划分。当它们相同时它非常有效,但在实践中它永远不会完全一致。记录可能跨越块边界。 Hadoop保证处理所有记录。处理特定分割的机器可以从除“主”块之外的块获取记录的片段,并且可以远程驻留。获取记录片段的通信成本是无关紧要的,因为它很少发生。

答案 3 :(得分:0)

要1)和2):我不是百分百肯定,但是如果任务无法完成 - 无论出于何种原因,包括输入分割有什么问题 - 那么它就会被终止,另一个就会在它的位置开始:所以每个maptask只用文件信息得到一个拆分(你可以通过调试本地集群来快速判断是否是这种情况,看看输入拆分对象中保存了什么信息:我好像记得它只是一个位置)。

到3):如果文件格式是可拆分的,那么Hadoop将尝试将文件剪切为“inputSplit”大小的块;如果没有,那么无论文件大小如何,每个文件都是一个任务。如果更改minimum-input-split的值,则可以防止在将每个输入文件划分为块大小时生成太多的映射器任务,但只能组合输入,如果你对组合器类做了一些魔术(我认为这就是所谓的)。

答案 4 :(得分:0)

Hadoop框架的优势在于它的数据位置。因此,每当客户端请求hdfs数据时,框架总是会检查其他地方,否则它会查找很少的I / O利用率。

答案 5 :(得分:0)

HDFS块大小是一个确切的数字,但输入分割大小是基于我们的 数据逻辑可能与配置的数字略有不同

答案 6 :(得分:0)

输入拆分是馈送到每个映射器的逻辑数据单元。数据分为有效记录。输入拆分包含块地址和字节偏移量。

假设您有一个跨越4个区块的文本文件。

  

文件:

a b c d
e f g h
i j k l
m n o p

  

块:

block1:a b c d e
block2:f g h i j
block3:k l m n o
block4:p

  

拆分:

Split1:a b c d e f h
Split2:i j k l m n o p

观察分割是否与文件中的边界(记录)内联。现在,每个拆分都被送到映射器。

如果输入分割大小小于块大小,则最终会使用更多no.of映射器,反之亦然。

希望有所帮助。