Spark工作完成但应用程序需要时间才能完成

Har*_*hit 12 scala amazon-s3 apache-spark

使用scala运行spark工作,正如预期的那样,所有工作都按时完成,但不知何故,一些INFO日志在作业停止前打印20-25分钟.

发布少量UI截图,可以帮助解决问题.

  1. 以下是4个阶段所需的时间:

时间分为4个阶段

  1. 以下是连续工作ID之间的时间 连续工作ID之间的时间

我不明白为什么两个工作ID之间花了这么多时间.

以下是我的代码段:

    val sc = new SparkContext(conf)
for (x <- 0 to 10) {
  val zz = getFilesList(lin);
  val links = zz._1
  val path = zz._2
  lin = zz._3
  val z = sc.textFile(links.mkString(",")).map(t => t.split('\t')).filter(t => t(4) == "xx" && t(6) == "x").map(t => titan2(t)).filter(t => t.length > 35).map(t => ((t(34)), (t(35), t(5), t(32), t(33))))
  val way_nodes = sc.textFile(way_source).map(t => t.split(";")).map(t => (t(0), t(1)));
  val t = z.join(way_nodes).map(t => (t._2._1._2, Array(Array(t._2._1._2, t._2._1._3, t._2._1._4, t._2._1._1, t._2._2)))).reduceByKey((t, y) => t ++ y).map(t => process(t)).flatMap(t => t).combineByKey(createTimeCombiner, timeCombiner, timeMerger).map(averagingFunction).map(t => t._1 + "," + t._2)
  t.saveAsTextFile(path)
}
sc.stop()
Run Code Online (Sandbox Code Playgroud)

更多后续内容:spark-1.4.1 saveAsTextFile到S3在emr-4.0.0上非常慢

Gle*_*olt 18

当我发表评论时,我建议使用spark-csv软件包而不是sc.saveAsTextFile使用该软件包直接写入s3没有问题:)

我不知道你是否使用s3或s3n,但可能尝试切换.我在Spark 1.5.2(EMR-4.2)上使用s3a遇到了问题,其中写入一直超时并且切换回s3解决了问题,因此值得一试.

应该加速写入s3的其他一些事情是使用DirectOutputCommiter

conf.set("spark.hadoop.mapred.output.committer.class","com.appsflyer.spark.DirectOutputCommitter")
Run Code Online (Sandbox Code Playgroud)

并禁用_SUCCESS文件的生成:

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
Run Code Online (Sandbox Code Playgroud)

请注意,必须在hadoop配置上设置禁用_SUCCESS文件,SparkContext而不是在SparkConf.

我希望这有帮助.


Har*_*hit 2

我最终升级了我的 Spark 版本,问题得到了解决。