Hadoop中分割大小和块大小之间的关系是什么?正如我在this中读到的那样,分割大小必须是块大小的n倍(n是整数且n> 0),这是正确的吗?分割大小和块大小之间是否存在任何关系?
答案 0 :(得分:55)
在HDFS架构中,存在块的概念。 HDFS使用的典型块大小为64 MB。当我们将一个大文件放入HDFS时,它会切成64 MB的块(基于块的默认配置),假设你有一个1GB的文件并且你想将该文件放在HDFS中,那么将有1GB / 64MB = 16个分割/块,这些块将分布在DataNode上。这些块/块将基于您的群集配置驻留在不同的不同DataNode上。
数据拆分基于文件偏移进行。分割文件并将其存储到不同块中的目标是并行处理和数据故障转移。
块大小和拆分大小之间的差异。
Split是数据的逻辑分割,主要用于在Hadoop Ecosystem上使用Map / Reduce程序或其他数据处理技术进行数据处理。拆分大小是用户定义的值,您可以根据数据量选择自己的拆分大小(您正在处理的数据量)。
Split主要用于控制Map / Reduce程序中Mapper的数量。如果您尚未在Map / Reduce程序中定义任何输入分割大小,则默认HDFS块分割将被视为输入分割。
示例:强>
假设您有一个100MB的文件且HDFS默认块配置为64MB,那么它将被切成2个分割并占用2个块。现在你有一个Map / Reduce程序来处理这个数据,但是你没有指定任何输入分割然后根据块的数量(2个块)输入分割将被考虑用于Map / Reduce处理,并且2个mapper将被分配给它工作
但是假设您已经在Map / Reduce程序中指定了分割大小(比如100MB),那么两个块(2个块)将被视为Map / Reduce处理的单个分割,并且将为此分配1个Mapper工作
假设您已在Map / Reduce程序中指定了分割大小(例如25MB),那么Map / Reduce程序将有4个输入分割,并且将为该作业分配4个Mapper。
<强>结论:强>
答案 1 :(得分:11)
如果要在 Block 1 上运行映射器,则映射器无法处理,因为它不会拥有整个第二条记录。
这是输入拆分解决的确切问题。 输入拆分尊重逻辑记录边界。
假设输入拆分尺寸 200MB
因此输入分割1 应该同时包含记录1和记录2.并且输入分割2不会以记录2开始,因为记录2已分配给输入分割1。输入分割2将以记录3开始。
这就是输入拆分只是逻辑块数据的原因。它指向以块为单位的起始位置和结束位置。
如果输入分割大小是块大小的n倍,则输入分割可以适合多个块,因此整个作业所需的 Mappers 数量更少,因此并行性更低。 (映射器的数量是输入分割的数量)
输入拆分大小=块大小是理想的配置。
希望这有帮助。
答案 2 :(得分:1)