Hadoop中的拆分大小与块大小
Hadoop中拆分大小和块大小之间的关系是什么?正如我读到的,分割大小必须是块大小的n倍(n是一个整数,n>0),这是正确的吗?分割大小和块大小之间有什么关系吗?在HDFS体系结构中,有块的概念。HDFS使用的典型块大小为64 MB。当我们将一个大文件放入HDFS时,它会被分割成64 MB的块(基于块的默认配置),假设您有一个1GB的文件,并且您想将该文件放入HDFS,那么将有1GB/64MB= 16个分割/块,这些块将分布在数据节点上。根据集群配置,这些块/区块将位于不同的DataNode上 根据文件偏移量进行数据拆分。分割文件并将其存储到不同块的目标是并行处理和数据故障转移 块大小和拆分大小之间的差异。 拆分是数据的逻辑拆分,基本上在Hadoop生态系统上使用Map/Reduce程序或其他数据处理技术进行数据处理时使用。分割大小是用户定义的值,您可以根据数据量(正在处理的数据量)选择自己的分割大小 Split基本上用于控制Map/Reduce程序中映射器的数量。如果您尚未在Map/Reduce程序中定义任何输入分割大小,则默认HDFS块分割将被视为输入分割 示例: 假设您有一个100MB的文件,HDFS的默认块配置是64MB,那么它将被分割成2个块,并占用2个块。现在,您有一个Map/Reduce程序来处理此数据,但您尚未指定任何输入分割,因此,基于块数(2块),将为Map/Reduce处理考虑输入分割,并为此作业分配2个映射器 但是,假设您在Map/Reduce程序中指定了分割大小(例如100MB),则两个块(2个块)将被视为Map/Reduce处理的单个分割,并且将为此作业分配1个映射器 假设您在Map/Reduce程序中指定了分割大小(比如25MB),那么Map/Reduce程序将有4个输入分割,并且将为作业分配4个映射器 结论:Hadoop中的拆分大小与块大小,hadoop,mapreduce,hdfs,Hadoop,Mapreduce,Hdfs,Hadoop中拆分大小和块大小之间的关系是什么?正如我读到的,分割大小必须是块大小的n倍(n是一个整数,n>0),这是正确的吗?分割大小和块大小之间有什么关系吗?在HDFS体系结构中,有块的概念。HDFS使用的典型块大小为64 MB。当我们将一个大文件放入HDFS时,它会被分割成64 MB的块(基于块的默认配置),假设您有一个1GB的文件,并且您想将该文件放入HDFS,那么将有1GB/64MB= 16个分割/块,这些块将分布在数据节点上。根据集群配置,这些块/区块将位于不同的DataNode上
- 假设我们有一个文件400MB,其中包含4条记录(e.g:400MB的csv文件,它有4行,每行100MB)
- 如果HDFS块大小配置为128MB,则4条记录将不会均匀分布在块之间。看起来是这样的
- 块1包含整个第一条记录和第二条记录的28MB块
- 如果要在块1上运行映射程序,映射程序将无法处理,因为它不会有完整的第二条记录
- 这正是输入拆分所要解决的问题输入拆分尊重逻辑记录边界
- 让我们假设输入分割大小为200MB
- 因此,输入拆分1应同时具有记录1和记录2。并且输入分割2不会以记录2开始,因为记录2已分配给输入分割1。输入拆分2将从记录3开始
- 这就是为什么输入拆分只是数据的逻辑块。它指向以块为单位的起点和终点位置
- 如果输入分割大小是块大小的n倍,则输入分割可以适合多个块,从而减少整个作业所需的映射器的数量,从而减少并行性。(映射器的数量是输入拆分的数量)
- 输入分割大小=块大小是理想的配置
希望这有帮助。拆分创建取决于所使用的输入格式。下图解释了FileInputFormat的getSplits()方法如何决定两个不同文件的拆分。
请注意拆分斜率(1.1)所起的作用。
进行拆分的相应Java源代码是:
上面的computeSplitSize()方法扩展到最大值(minSize,min(maxSize,blockSize)),其中可以通过设置mapreduce.input.fileinputformat.split.minSize/maxSize来配置最小/最大大小。为什么输入拆分为2 100 mb而不是200 mb?@ssinganamalla:这是一个错误。该图像中的所有输入分割应为200MB@tharindu_DG请参阅本文件以及其中一个最好的解释。我希望我能投下无限的一票。sandeep bhai,badhiya:)