San*_*ngh 59
在HDFS架构中,存在块的概念.HDFS使用的典型块大小为64 MB.当我们将一个大文件放入HDFS时,它会切换成64 MB的块(基于块的默认配置),假设你有一个1GB的文件并且你想将该文件放在HDFS中,那么将有1GB/64MB = 16分割/块,这些块将分布在DataNodes上.这些块/块将基于您的群集配置驻留在不同的不同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.
结论:
tha*_*_DG 11
如果要在块1上运行映射器,则映射器无法处理,因为它不会具有整个第二条记录.
这是输入拆分解决的确切问题.输入拆分遵循逻辑记录边界.
让我们假设输入分割大小为200MB
因此,输入分割1应该同时具有记录1和记录2.并且输入分割2不会以记录2开始,因为记录2已被分配给输入分割1.输入分割2将以记录3开始.
这就是输入拆分仅是逻辑数据块的原因.它指向以块为单位的起始位置和结束位置.
如果输入分割大小是块大小的n倍,则输入分割可以适合多个块,因此整个作业所需的Mapper数量较少,因此并行性较低.(映射器的数量是输入分割的数量)
输入分割大小=块大小是理想的配置.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
23084 次 |
| 最近记录: |