hadoop中的拆分大小与块大小

k3bvogb1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(573)

hadoop中拆分大小和块大小之间的关系是什么?正如我读到的,分割大小必须是块大小的n倍(n是整数,n>0),对吗?分割大小和块大小之间有什么必然的关系吗?

enxuqcxy

enxuqcxy1#

拆分创建取决于所使用的inputformat。下图解释了fileinputformat的getsplits()方法如何决定两个不同文件的拆分。
请注意拆分坡度(1.1)所起的作用。

执行拆分的相应java源代码是:

上面的computesplitsize()方法扩展到max(minsize,min(maxsize,blocksize)),其中可以通过设置mapreduce.input.fileinputformat.split.minsize/maxsize配置最小/最大大小

nfs0ujit

nfs0ujit2#

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

如果hdfs块大小配置为128mb,那么4条记录将不会均匀地分布在块之间。它看起来像这样。

块1包含整个第一条记录和第二条记录的28mb块。
如果要在块1上运行Map程序,则Map程序无法处理,因为它不会有完整的第二条记录。
这正是输入拆分解决的问题。输入拆分遵循逻辑记录边界。
假设输入拆分大小为200mb

因此,输入split1应该同时具有记录1和记录2。输入分割2不会以记录2开始,因为记录2已分配给输入分割1。输入拆分2将从记录3开始。
这就是为什么输入分割只是一个逻辑数据块。它用in块指向起始和结束位置。
如果输入分割大小是块大小的n倍,则输入分割可以适合多个块,从而减少整个作业所需的Map器数量,从而减少并行性(number of Mapper是输入拆分的数目)
输入分割大小=块大小是理想的配置。
希望这有帮助。

pxy2qtax

pxy2qtax3#

在hdfs体系结构中,有块的概念。hdfs使用的典型块大小是64 mb。当我们把一个大文件放入hdfs时,它会被切碎成64mb的块(基于默认的块配置),假设你有一个1gb的文件,你想把这个文件放入hdfs,那么会有1gb/64mb=16个split/块,这些块会分布在数据节点上。根据集群配置,这些块/区块将驻留在不同的数据节点上。
根据文件偏移量进行数据拆分。将文件拆分并存储到不同的块中的目标是并行处理和数据故障转移。
块大小和拆分大小之间的差异。
split是数据的逻辑拆分,基本上在hadoop生态系统上使用map/reduce程序或其他数据处理技术进行数据处理时使用。拆分大小是用户定义的值,您可以根据数据量(处理的数据量)选择自己的拆分大小。
split主要用于控制map/reduce程序中Map器的数量。如果您没有在map/reduce程序中定义任何输入分割大小,那么默认的hdfs块分割将被视为输入分割。
例子:
假设您有一个100mb的文件,hdfs的默认块配置是64mb,那么它将被分割成2个块并占用2个块。现在,您有一个map/reduce程序来处理此数据,但是您没有指定任何输入分割,那么基于块数(2块),将考虑对map/reduce处理进行输入分割,并为此作业分配2个Map器。
但是,假设您在map/reduce程序中指定了分割大小(比如100mb),那么两个块(2个块)将被视为map/reduce处理的单个分割,并且将为此作业分配一个Map器。
假设您在map/reduce程序中指定了分割大小(比如25mb),那么map/reduce程序将有4个输入分割,并且将为作业分配4个Map器。
结论:
分割是输入数据的逻辑分割,而块是数据的物理分割。
如果未指定输入分割,则hdfs default block size是默认分割大小。
分割是用户定义的,用户可以在map/reduce程序中控制分割大小。
一个分割可以Map到多个块,并且一个块可以有多个分割。
Map任务(mapper)的数量等于拆分的数量。

相关问题