前言
通常情况下,作业会通过input目录产生一个或多个任务。
主要决定因素:
- input的文件总个数
- input的文件大小
- 集群设置的文件块大小
1. 是不是越多越好呢?
答案:不是!
原因:假如一个任务有很多小文件,并且文件大小远远小于块大小128M(默认值),则每个小文件也会被当作一个块,用一个map任务来完成,一个map任务启动和初始化的时间远大于逻辑处理时间,就会造成很大的资源浪费,
注意:同时可执行的map数量是有限制的。
解决方法:合并小文件
在map执行前合并小文件,减少map数。
HiveInputFormat:没有对小文件合并的功能。
CombineHiveInputFormat:具有合并小文件的功能(系统默认开启),如果不是这种格式,可以对hive.input.format选项进行设置:
set hive.input.format=org