一般map的个数系统会根据文件block数量来获取
而reduce个数一般默认1个,在每个JOB用户根据自己的需要自己调整
但是往往同一个JOB在不同目录下获取的数据大小相差很多,所以要根据每次获取数据的大小来确定reduce
public static long getDirSize(Path dir, Configuration conf) throws IOException{
URI uri = dir.toUri();
String thisScheme = uri.getScheme();
FileSystem hdfs = dir.getFileSystem(conf);
LOGGER.info("thisScheme = " + thisScheme);
return hdfs.getContentSummary(dir).getLength();
}
这个方法可以获取dir这个文件夹的大小,然后根据数据大小自行决定reduce的数量
PS:
获取FileSystem对象还有一个方法就是通过FileSystem.get(conf)方法,不过最好不要用这个方法
因为path很有可能并非hdsf的FileSystem,也有可能是har或者其他的FileSystem
用path.getFileSystem系统会自行决定获取哪个FileSystem对象