Apache spark Spark:当数据量变大时,无法运行terasort

Apache spark Spark:当数据量变大时,无法运行terasort,apache-spark,Apache Spark,我有一个spark bench,其中包括terasort,当数据只有几百GB时它可以正常运行,但当我生成更多数据(如1 TB)时,它在某些步骤中出错。以下是我的代码: import org.apache.spark.rdd._ import org.apache.spark._ import org.apache.spark.SparkContext._ object ScalaTeraSort{ def main(args: Array[String]){ if (args.

我有一个spark bench,其中包括terasort,当数据只有几百GB时它可以正常运行,但当我生成更多数据(如1 TB)时,它在某些步骤中出错。以下是我的代码:

import org.apache.spark.rdd._
import org.apache.spark._
import org.apache.spark.SparkContext._


object ScalaTeraSort{

  def main(args: Array[String]){
    if (args.length < 2){
      System.err.println(
        s"Usage: $ScalaTeraSort <INPUT_HDFS> <OUTPUT_HDFS>"
      )
      System.exit(1)
    }
    val sparkConf = new SparkConf().setAppName("ScalaTeraSort")
    val sc = new SparkContext(sparkConf)

    val file = sc.textFile(args(0))
    val data = file.map(line => (line.substring(0, 10), line.substring(10)))
                     .sortByKey().map{case(k, v) => k + v}
    data.saveAsTextFile(args(1))

    sc.stop()
  }
import org.apache.spark.rdd_
导入org.apache.spark_
导入org.apache.spark.SparkContext_
对象ScalaTeraSort{
def main(参数:数组[字符串]){
如果(参数长度<2){
System.err.println(
s“用法:$ScalaTeraSort”
)
系统出口(1)
}
val sparkConf=new sparkConf().setAppName(“ScalaTeraSort”)
val sc=新的SparkContext(sparkConf)
val file=sc.textFile(args(0))
val data=file.map(line=>(line.substring(0,10),line.substring(10)))
.sortByKey().map{case(k,v)=>k+v}
data.saveAsTextFile(args(1))
sc.停止()
}
}


此代码主要包括3个步骤:sortByKey、map和saveAsTextFile。前两步似乎没有错,但到了第三步,它总是出错,然后重试第二步。第三步出错是因为“FetchFailed(BlockManagerId(40,sr232,44815,0),shuffleId=0,mapId=11825,reduceId=0)”我找到了原因,基本问题是:java.io.IOException:SendMessageReliable失败,因为在60秒内没有收到ack


也就是说,您必须将属性“spark.core.connection.ack.wait.timeout”设置为更大的值,默认值为60秒。否则,由于长时间没有响应,该阶段将失败。

FetchFailed
不是真正的原因。第一个或潜在错误是什么?14 14/10/08 14:33:53警告TaskSetManager:在阶段1.1中丢失任务160.0(TID 46245,sr200):获取失败(BlockManagerId(14,sr229,55202,0),shuffleId=0,mapId=11709,reduceId=160)15 14/10/08 14:33:53信息DAGScheduler:重新提交失败的阶段16 14/10/08 14:33:53警告TaskSetManager:在阶段1.1中丢失任务206.0(TID 46291,sr200):获取失败(BlockManagerId(30,sr168,46857,0),shuffleId=0,mapId=12720,reduceId=206)17 14/10/08 14:33:53信息DAGScheduler:重新提交阶段2(位于ScalaTeraSort.scala:45的映射)第1阶段(ScalaTeraSort.scala:47保存astextfile)由于获取失败,我面临着完全相同的错误,我无法找到解决方案。此设置是否有助于完成1TB terasort?您的spark cluster的配置是什么?