Hadoop Map任务数量是否仅由分片数决定?考题疑问解析
Hadoop Map任务数量相关问题解答
1. Map任务数量的影响因素
Map任务的数量不是仅由分片数决定,除了输入分片(Input Split)的数量,还有以下关键影响因素:
mapreduce.job.maps参数:可通过该配置强制指定Map任务总数,不过不建议硬编码,会破坏数据本地性优化逻辑- 输入格式(InputFormat)实现:不同InputFormat的分片逻辑不同,比如
CombineTextInputFormat可合并多个小文件为一个分片以减少Map任务数;自定义InputFormat也能实现将单个HDFS块拆分为多个分片 - 分片大小配置参数:
mapreduce.input.fileinputformat.split.maxsize:当该值小于HDFS块大小时,单个HDFS块会被拆分为多个更小的分片mapreduce.input.fileinputformat.split.minsize:当该值大于HDFS块大小时,多个HDFS块会被合并为一个分片
- 文件可拆分性:若文件为不可拆分格式(如GZIP压缩文件),即便文件大小超过HDFS块大小,也只会生成一个分片,对应一个Map任务
2. 10个HDFS块对应20个Map任务的原因
核心逻辑是输入分片的大小可以小于HDFS块大小:
假设HDFS默认块大小为128MB,若将mapreduce.input.fileinputformat.split.maxsize设置为64MB,那么每个128MB的HDFS块会被拆分为2个64MB的输入分片,10个块就会生成20个分片,对应启动20个Map任务。
此外,也可通过自定义InputFormat实现自定义分片逻辑,主动将单个HDFS块拆分为多个分片,从而得到更多Map任务。不过需注意,过多Map任务会带来额外调度开销,需结合作业计算复杂度、数据量合理调整。
内容的提问来源于stack exchange,提问作者Zofia Smoleń
相关产品推荐
相关产品推荐

