hdfs的块大小是64 mb吗?是否有任何配置参数可用于更改它?对于读取gzip文件的Map程序,gzip文件的数量必须等于Map程序的数量,这是真的吗?
mwecs4sa1#
这取决于您的:输入格式-某些输入格式( NLineInputFormat , WholeFileInputFormat )在块大小以外的边界上工作。总的来说,尽管 FileInputFormat 将使用块边界作为参考文件块大小-单个文件不需要具有与默认块大小相同的块大小。这是在将文件上载到hdfs时设置的-如果未显式设置,则应用默认块大小(上载时)。文件上载后对默认/系统块大小的任何更改都不会对已上载的文件产生影响。两个 FileInputFormat 配置属性 mapred.min.split.size 以及 mapred.max.split.size 通常默认为 1 以及 Long.MAX_VALUE ,但如果在系统配置或作业中重写了此项,则这将更改每个Map程序处理的数据量以及生成的Map程序任务数。不可拆分的压缩-例如gzip,不能由多个Map器处理,因此每个gzip文件将有一个Map器(除非您使用类似的 CombineFileInputFormat , CompositeInputFormat )因此,如果您有块大小为64m的文件,但希望处理的每个Map任务都多于或少于此任务,那么您应该能够设置以下作业配置属性: mapred.min.split.size -如果您希望使用较少的Map器,则会以(可能)丢失数据位置为代价(单个Map任务处理的所有数据现在可能位于2个或更多数据节点上)大于默认值 mapred.max.split.size -小于默认值,如果您想使用更多Map器(假设您有一个cpu密集型Map器)来处理每个文件如果您使用的是mr2/Yarn,则不推荐使用上述属性,并将其替换为:mapreduce.input.fileinputformat.split.minsize mapreduce.input.fileinputformat.split.maxsize
NLineInputFormat
WholeFileInputFormat
FileInputFormat
mapred.min.split.size
mapred.max.split.size
1
Long.MAX_VALUE
CombineFileInputFormat
CompositeInputFormat
mapreduce.input.fileinputformat.split.maxsize
1条答案
按热度按时间mwecs4sa1#
这取决于您的:
输入格式-某些输入格式(
NLineInputFormat
,WholeFileInputFormat
)在块大小以外的边界上工作。总的来说,尽管FileInputFormat
将使用块边界作为参考文件块大小-单个文件不需要具有与默认块大小相同的块大小。这是在将文件上载到hdfs时设置的-如果未显式设置,则应用默认块大小(上载时)。文件上载后对默认/系统块大小的任何更改都不会对已上载的文件产生影响。
两个
FileInputFormat
配置属性mapred.min.split.size
以及mapred.max.split.size
通常默认为1
以及Long.MAX_VALUE
,但如果在系统配置或作业中重写了此项,则这将更改每个Map程序处理的数据量以及生成的Map程序任务数。不可拆分的压缩-例如gzip,不能由多个Map器处理,因此每个gzip文件将有一个Map器(除非您使用类似的
CombineFileInputFormat
,CompositeInputFormat
)因此,如果您有块大小为64m的文件,但希望处理的每个Map任务都多于或少于此任务,那么您应该能够设置以下作业配置属性:
mapred.min.split.size
-如果您希望使用较少的Map器,则会以(可能)丢失数据位置为代价(单个Map任务处理的所有数据现在可能位于2个或更多数据节点上)大于默认值mapred.max.split.size
-小于默认值,如果您想使用更多Map器(假设您有一个cpu密集型Map器)来处理每个文件如果您使用的是mr2/Yarn,则不推荐使用上述属性,并将其替换为:
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize