如果输入RDD的大小大于内存容量,Spark默认会将多余的数据存储到磁盘

时间:2019-06-11 11:17:53

标签: apache-spark apache-spark-sql pyspark-sql

我有一个大小为260GB的输入文件,并且我的Spark集群内存容量为140 gb,运行我的spark作业后,默认情况下120的多余数据将存储到磁盘,或者我应该使用一些存储级别来指定它。

我尚未尝试任何解决方案来解决此问题。

 def main(args: Array[String]){
 val conf:SparkConf = new SparkConf().setAppName("optimize_1").setMaster("local")
     val sc:SparkContext = new SparkContext(conf)

 val myRDD = sc.parallelize( List(("1", "abc", "Request"), ("1", "cba", "Response"), ("2", "def", "Request"), ("2", "fed", "Response"), ("3", "ghi", "Request"), ("3", "ihg", "Response")) )

 val myRDD_1 = sc.parallelize( List(("1", "abc"), ("1", "cba"), ("2", "def"), ("2", "fed"), ("3", "ghi"), ("3", "ihg")) )


 myRDD_1.map(x=>x).groupBy(_._1).take(10).foreach(println)

 myRDD_1.groupByKey().foreach(println)  }

以下是小数据的预期工作输出:

(2,CompactBuffer(def, fed))

(3,CompactBuffer(ghi, ihg))

(1,CompactBuffer(abc, cba))

但是在大​​规模应用时,我会收到以下错误:

  

“ Dspark.ui.port = 0”   -Dspark.yarn.app.container.log.dir = / hadoop / yarn / log / application_1555417914353_0069 / container_e05_1555417914353_0069_02_000009   -XX:OnOutOfMemoryError ='kill%p'org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url   spark:// CoarseGrainedScheduler @ DOSSPOCVM1:33303 --executor-id 8   --hostname DOSSPOCVM1 --cores 1 --app-id application_1555417914353_0069 --user-class-path文件:$ PWD / app .jar   1> / hadoop / yarn / log / application_1555417914353_0069 / container_e05_1555417914353_0069_02_000009 / stdout   2> / hadoop / yarn / log / application_1555417914353_0069 / container_e05_1555417914353_0069_02_000009 / stderr“”

     

错误YarnClusterScheduler:在DOSSPOCVM2上丢失了执行程序17:容器   标记为失败:主机上的container_e05_1555417914353_0069_02_000019:   DOSSPOCVM2。退出状态:-100。诊断:容器已在   丢失节点

请提出解决此问题的方法

0 个答案:

没有答案