原文地址:http://www.aboutyun.com/thread-9946-1-1.html
--------------------------------------
問題導讀
1、當前集群的可用資源不能滿足應用程序的需求,怎么解決?
2、內存里堆的東西太多了,有什么好辦法嗎?
1、WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster uito ensure that workers are registered and have sufficient memory
當前的集群的可用資源不能滿足應用程序所請求的資源。
資源分2類: cores 和 ram
Core代表對執行可用的executor slots
Ram代表每個Worker上被需要的空閑內存來運行你的Application。
解決方法:
應用不要請求多余空閑可用資源的
關閉掉已經執行結束的Application
2、Application isn’t using all of the Cores: How to set the Cores used by a Spark App
設置每個App所能獲得的core
解決方法:
spark-env.sh里設置spark.deploy.defaultCores
或
spark.cores.max
3、Spark Executor OOM: How to set Memory Parameters on Spark
OOM是內存里堆的東西太多了
1、增加job的并行度,即增加job的partition數量,把大數據集切分成更小的數據,可以減少一次性load到內存中的數據量。InputFomart, getSplit來確定。
2、spark.storage.memoryFraction
管理executor中RDD和運行任務時的內存比例,如果shuffle比較小,只需要一點點shuffle memory,那么就調大這個比例。默認是0.6。不能比老年代還要大。大了就是浪費。
3、spark.executor.memory如果還是不行,那么就要加Executor的內存了,改完executor內存后,這個需要重啟。
4、Shark Server/ Long Running Application Metadata Cleanup
Spark程序的元數據是會往內存中無限存儲的。spark.cleaner.ttl來防止OOM,主要出現在Spark Steaming和Shark Server里。
export SPARK_JAVA_OPTS +="-Dspark.kryoserializer.buffer.mb=10 -Dspark.cleaner.ttl=43200"
5、Class Not Found: Classpath Issues
問題1、缺少jar,不在classpath里。
問題2、jar包沖突,同一個jar不同版本。
解決1:
將所有依賴jar都打入到一個fatJar包里,然后手動設置依賴到指定每臺機器的DIR。
val conf = new SparkConf().setAppName(appName).setJars(Seq(System.getProperty("user.dir") + "/target/scala-2.10/sparktest.jar"))
解決2:
把所需要的依賴jar包都放到default classpath里,分發到各個worker node上。
關于性能優化:
第一個是sort-based shuffle。這個功能大大的減少了超大規模作業在shuffle方面的內存占用量,使得我們可以用更多的內存去排序。
第二個是新的基于Netty的網絡模塊取代了原有的NIO網絡模塊。這個新的模塊提高了網絡傳輸的性能,并且脫離JVM的GC自己管理內存,降低了GC頻率。
第三個是一個獨立于Spark executor的external shuffle service。這樣子executor在GC的時候其他節點還可以通過這個service來抓取shuffle數據,所以網絡傳輸本身不受到GC的影響。
過去一些的參賽系統軟件方面的處理都沒有能力達到硬件的瓶頸,甚至對硬件的利用率還不到10%。而這次我們的參賽系統在map期間用滿了3GB/s的硬盤帶寬,達到了這些虛擬機上八塊SSD的瓶頸,在reduce期間網絡利用率到了1.1GB/s,接近物理極限。
參考文獻:
http://www.datastax.com/dev/blog/common-spark-troubleshooting
http://www.csdn.net/article/2014-11-06/2822505
-------------
更多的Java,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,教程,視頻請訪問:
http://www.cnblogs.com/zengmiaogen/p/7083694.html