Spark:用CombineTextInputFormat缓解小文件过多导致Task数目过多的问题
http://www.cnblogs.com/yurunmiao/p/5195754.html
原始读法:
lines = sc.textFile("hdfs:///dir/")
这样一个block会形成一个partition,对应一个task。
优化读法:
lines = sc.newAPIHadoopFile(
"hdfs:///dir/",
"org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat",
"org.apache.hadoop.io.LongWritable",
"org.apache.hadoop.io.Text")
.map(s => s._1)
org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat
可以将多个小文件合并生成一个Split,而一个Split会被一个Task处理,从而减少Task的数目。