每个Hadoop映射器将读取的默认大小是多少?

时间:2013-07-25 08:29:23

标签: hadoop mapreduce hdfs

HDFS的块大小是64 MB吗?是否有可用于更改它的配置参数?

对于读取gzip文件的映射器,gzip文件的数量是否必须等于映射器的数量?

1 个答案:

答案 0 :(得分:10)

这取决于您:

  • 输入格式 - 某些输入格式(NLineInputFormatWholeFileInputFormat)适用于块大小以外的边界。通常,虽然从FileInputFormat扩展的任何内容都将使用块边界作为指南
  • 文件块大小 - 单个文件不需要与默认块大小具有相同的块大小。将文件上载到HDFS时设置 - 如果未明确设置,则应用默认块大小(在上载时)。文件后对默认/系统块大小的任何更改都不会对已上载的文件产生任何影响。
  • 两个FileInputFormat配置属性mapred.min.split.sizemapred.max.split.size通常默认为1Long.MAX_VALUE,但如果在系统配置中覆盖了此属性,或者你的工作,这将改变每个映射器处理的数据的分配,以及产生的映射器任务的数量。
  • 不可拆分压缩 - 例如gzip,不能​​由多个映射器处理,因此每个gzip文件将获得1个映射器(除非您使用的是CombineFileInputFormat,{{1} })

因此,如果您的文件块大小为64m,但要想处理多于或少于每个地图任务的文件,那么您应该只能设置以下作业配置属性:

  • CompositeInputFormat - 大于默认值,如果您想使用更少的映射器,代价是(可能)丢失数据局部性(单个映射任务处理的所有数据现在可能位于2个或更多数据节点上)
  • mapred.min.split.size - 小于默认值,如果你想使用更多的映射器(比如你有一个CPU密集型映射器)来处理每个文件

如果您使用的是MR2 / YARN,则不推荐使用上述属性,并替换为:

  • mapred.max.split.size
  • mapreduce.input.fileinputformat.split.minsize