生活随笔
收集整理的這篇文章主要介紹了
Spark资源分配异常闪Bug
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
故障描述
????前段時間在測試Spark的RDD轉換的lazy特性是發現了一個Spark內部對taskSet在executor的運行分配不均勻問題。先上兩張圖出現問題時間點的圖,大家估計就明白怎么回事了:
再看看簡單的測試代碼:
import?org.apache.spark._
import?org.apache.spark.storage.StorageLevel/***?Created?by?zhaozhengzeng?on?2015/1/5.*/import?java.util.Random
import?org.apache.hadoop.io.compress.CompressionCodec
import?org.apache.spark.rdd.RDD
import?org.apache.spark.SparkContext._object?JoinTest?{def?main(args:?Array[String])?{val?sparkConf?=?new?SparkConf().setAppName("Spark?count?test").set("spark.kryoserializer.buffer.max.mb",?"128").set("spark.shuffle.manager",?"sort")//?set("spark.default.parallelism","1000")val?sc?=?new?SparkContext(sparkConf)//連接表1val?textFile1?=?sc.textFile("/user/hive/warehouse/test1.db/st_pc_lifecycle_list/dt=2014-07-01").map(p?=>?{val?line?=?p.split("\\|")(line(10),?1)}).reduceByKey((x,?y)?=>?x?+?y)//測試RDD的lozy特性val?textFile3?=?sc.textFile("/user/hive/warehouse/test1.db/st_pc_lifecycle_list/dt=2014-09-*").map(p?=>?{val?line?=?p.split("\\|")(line(11),"")})val?textFile2?=?sc.textFile("/user/hive/warehouse/test1.db/st_pc_lifecycle_list/*").mapPartitions({?it?=>for?{line?<-?it}?yield?(line.split("\\|")(10),?"")})val?count?=?textFile1.join(textFile2).count()println("join?之后的記錄數據:"?+?count)//textFile1.saveAsTextFile("/user/hive/warehouse/test1.db/testRs/rs2")sc.stop()}
}
描述下,上面代碼主要測試RDD的Join轉換,以及測試textFile3的translation的lazy特性。在整個測試過程通過觀察Spark UI看到上面這種TaskSet分布不均勻情況。第一個圖中的Active Task為0的executor中在運行第一個stage的taskSet后,spark不會講第二個stage的taskSet分配到這些executor中執行了。但是奇怪的是這種情況并不是經常會出現,我再接下來的N次重跑作業又不會出現這種情況,具體什么原因暫時無法找到,連重現的機會都沒有,哈哈。這里先記錄下吧,再觀察...
總結
以上是生活随笔為你收集整理的Spark资源分配异常闪Bug的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。