Hadoop 中的分割大小和块大小之间有什么关系?当我读到this http://willddy.github.io/2012/08/25/Hadoop-Split-and-Block.html,分割大小必须是块大小的n倍(n是整数并且n>0),这是正确的吗?分割大小和块大小之间有一定的关系吗?
在HDFS架构中,有一个块的概念。 HDFS 使用的典型块大小是 64 MB。当我们将一个大文件放入HDFS时,它被切分成64 MB的块(基于块的默认配置),假设您有一个1GB的文件并且您想将该文件放入HDFS,那么将有1GB/64MB =
16 个分割/块,这些块将分布在 DataNode 上。根据您的集群配置,这些块/块将驻留在不同的 DataNode 上。
数据分割是根据文件偏移量进行的。将文件分割并将其存储到不同的块中的目标是并行处理和数据的故障转移。
块大小和分割大小之间的差异。
分割是数据的逻辑分割,主要用于使用 Map/Reduce 程序或 Hadoop 生态系统上的其他数据处理技术进行数据处理。分割大小是用户定义的值,您可以根据您的数据量(您正在处理的数据量)选择自己的分割大小。
Split主要用于控制Map/Reduce程序中Mapper的数量。如果您没有在 Map/Reduce 程序中定义任何输入分割大小,则默认的 HDFS 块分割将被视为输入分割。
Example:
假设您有一个 100MB 的文件,HDFS 默认块配置为 64MB,那么它将被切成 2 个分割并占用 2 个块。现在您有一个 Map/Reduce 程序来处理此数据,但您尚未指定任何输入拆分,然后根据块数(2 个块)输入拆分将被考虑用于 Map/Reduce 处理,并且将为此分配 2 个映射器工作。
但是假设您在 Map/Reduce 程序中指定了分割大小(例如 100MB),那么两个块(2 个块)将被视为用于 Map/Reduce 处理的单个分割,并且将为此作业分配 1 个 Mapper。
假设您在 Map/Reduce 程序中指定了分割大小(例如 25MB),那么 Map/Reduce 程序将有 4 个输入分割,并且将为该作业分配 4 个 Mapper。
结论:
- Split是输入数据的逻辑划分,而block是数据的物理划分。
- 如果未指定输入分割,则 HDFS 默认块大小为默认分割大小。
- 分割是用户定义的,用户可以在 Map/Reduce 程序中控制分割大小。
- 一个split可以映射到多个block,一个block可以有多个split。
- Map任务(Mapper)的数量等于Split的数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)