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

时间:2014-10-08 01:01:22

标签: apache-spark

我有一个包含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()
  }

}

此代码主要包括3个步骤:sortByKey,map和saveAsTextFile。似乎前两步没有错,但是当涉及第三步时,它一直出错,然后重试第二步。第三步出错是因为 “FetchFailed(BlockManagerId(40,sr232,44815,0),shuffleId = 0,mapId = 11825,reduceId = 0)”

1 个答案:

答案 0 :(得分:4)

我发现原因,基本问题是: java.io.IOException:sendMessage可能因为未在60秒内收到确认而失败

也就是说,你必须设置属性&#34; spark.core.connection.ack.wait.timeout&#34;更大的值,默认情况下它是60秒。另外,由于长时间没有回应,舞台会失败。