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

Sha*_*awn 4 hadoop mapreduce hdfs

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

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

Chr*_*ite 10

这取决于您:

  • 输入格式 - 某些输入格式(NLineInputFormat,WholeFileInputFormat)在块大小以外的边界上工作.通常,虽然任何扩展FileInputFormat都将使用块边界作为指南
  • 文件块大小 - 单个文件不需要具有与默认块大小相同的块大小.将文件上载到HDFS时设置 - 如果未明确设置,则应用默认块大小(在上载时).文件后对默认/系统块大小的任何更改都不会对已上载的文件产生任何影响.
  • 这两个FileInputFormat配置属性mapred.min.split.sizemapred.max.split.size一般默认为1Long.MAX_VALUE,但如果这是在您的系统配置覆盖,或在你的工作,那么这将改变每个映射处理的数据amunt,以及映射任务的数量产生了.
  • 非分裂式压缩-如gzip,不能由不止一个映射器处理,所以你会得到每gzip文件1名映射器(除非你使用像CombineFileInputFormat,CompositeInputFormat)

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

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

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

  • mapreduce.input.fileinputformat.split.minsize
  • mapreduce.input.fileinputformat.split.maxsize