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的数目。

posted @ 2019-01-07 13:36  xuejianbest  阅读(506)  评论(0编辑  收藏  举报