整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

7.2.1.3. FilelnputFormat类的输入分片

hadoop 花牛 8℃ 0评论

假设有一组文件,FilelnputFormat如何把它们转换为输入分片呢? FilelnputFormat只分割大文件。这里的“大”指的是文件超过HDFS块的大小。分片通常与HDFS块大小一样,这在大多应用中是合理的然而,这个值也可以通过设置不同的Hadoop属性来改变,如表7-5所示。

表7-5.控制分片大小的属性

属性名称

类型

默认值

描述

mapred.min.split.size

int

1

一个文件分片最小的效字节数

mapred.max.split.size

long

Long.MAX_VALUE,即 9223372036854775807

一个文件分片中最大的 有效字节数(以字节算)

dfs.block.size

long

64 MB,67108864

HDFS中块的大小(按字节)

mapred.max.split.size这个属性在老版本的MapReduce API中没有出现(除了CombineFilelnputFormat)。然而,这个值是被间接计算的。计算方法是作业总的输入大小除以map任务数,该值由 mapred.map.tasks(或 JobConf 上的 SetNumMapTasks()方法)设置。因为 mapred.map.tasks默认值是1,所以,分片的最大值就是输入的大小

最小的分片大小通常是1个字节,不过某些格式可以使分片大小有一个更低的下界。(例如,顺序文件在流中每次插入一个同步入口,所以,最小的分片大小不得不足够大以确保每个分片有一个同步点,以便reader根据记录边界进行重新同步。

应用程序可以强制设置一个最小的输入分片大小:通过设置一个比HDFS 块更大一些的值,强制分片比文件块大。如果数据存储在HDFS上,那么这样做是没有好处的,因为这样做会对map任务来说不是本地文件的文件块数。

最大的分片大小默认是由Java long类型表示的最大值。只有把它的值被设置成小于块大小才有效果,这将强制分片比块小。

分片的大小由以下公式计算(参见FilelnputFormat的computeSplitSize() 方法):

max(minimumSize, min (maximumSize, blockSize))

在默认情况下:

minimumSize < blockSize < maximumSize

所以分片的大小就是blocksize。这些参数的不同设置及其如何影响最终 分片大小请参见表7-6的说明。

表7-6.举例说明如何控制分片的大小

最小分片大小

最大分片大小

块的大小

分片大小

说明

1(默认值

Long.MAX_VALUE(默认值)

64MB(默认值)

64MB

默认情况下,分片大小与块大小相同

1(默认值

Long.MAX_VALUE(默认值)

128MB

128MB

增加分片大小最自然的方法是提供更大的HDFS块,通过dfs. block.size或在构建文件时针对单个文件进行设置

128MB

Long.MAX_VALUE(默认值)

64MB(默认值)

128MB

通过使最小分片大小的值大于块大小的方法来增大分片大小,但代价是增加了本地操作

1(默认值

32MB

64 MB

(默认值)

32MB

通过使最大分片大小的值大于块大小的方法来减少分片大小

 

转载请注明:全栈大数据 » 7.2.1.3. FilelnputFormat类的输入分片

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址