假设你的JAVA M-R job的输入文件是大量纯文本文件,而且每个文件都比较小(例如几百K),那么job运行起来之后会占用大量mapper数,导致Hadoop集群资源被过度消耗。这种情况可以通过合并输入文件来避免。
Hadoop本身已经提供了这种支持。方法很简单,大致代码如下:
Job job = Job.getInstance(getConf());
job.setJarByClass(getClass());
job.setInputFormatClass(CombineTextInputFormat.class);
FileInputFormat.addInputPaths(job, "your_input_path");
job.setMapperClass(YourMapper.class);
job.setReducerClass(YourReducer.class);
关键就是要使用 CombineTextInputFormat。
文章来源:https://www.codelast.com/
然后在调用该JAVA程序的shell脚本中,向程序传入参数:
-D mapreduce.input.fileinputformat.split.maxsize=268435456
这设置了每一个split的大小为 268435456 字节(即 256MB,1024*1024*256=268435456)。如果不设置,一般情况下是不行的,因为程序会把所有输入合并到一个split中,如果输入数据量超大,job就跑不动了。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):