您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何進行spark on yarn集群調優,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
jar包管理:在spark-default.conf文件中指定Spark.YARN.jars在hdfs上的SPARK需要的jar包。否則每次提交application,spark會將driver端的SPARK_HOE下的jar.node, spark.locality.wait.pack包分發到各節點上。浪費磁盤資源和網絡資源。
yarn隊列資源不足導致的應用運行失敗,這類問題主要針對提交作業的調優:
1.在J2EE中間層,通過線程池技術提交作業,并設置線程池大小為1。
2.若只有一個應用,可以將資源調整到最大
3.若有些spark應用明顯的耗時,可以spark擁有的資源進行分類(耗時任務和快速任務),此時可以使用兩個線程池提交作業,每個線程池大小為1。
數據本地化:分布式存儲是大數據技術的核心,而為了提高大數據計算的效率,使計算靠近數據,減少移動大量數據而產生的網絡io和磁盤io。
spark中的本地級別有:PROCESS_LOCAL(進程本地化,效率最高), NODE_LOCAL(節點本地化), PACK_LOCAL(機架本地化), ANY, NO_PREF。在實際運行中我們希望的是大多數計算是進程本地化或節點本地化。
調優方式:1. 優化算法 2. 數據設置合理的副本數 3. 將常用的rdd設置緩存 4. 設置spark相關參數spark.locality.wait,spark.locality.wait.process, spark.locality.wait.node, spark.locality.wait.pack。 在client模式下運行,觀察運行日志,使得大多數計算是PROCESS_LOCAL,同時application運行時間減少了,才是有效的優化。為了提升數據計算本地化級別而犧牲application運行時間,是不可取得,這樣也會造成大量資源的閑置和較長的等待時間。
Executor經常被kill掉,出現Container killed by YARN for exceeding memory limits,內存被用完導致此類問題的發生:
移除rdd緩存
spark.storage.memoryFraction:spark數據緩存的的內存占比,默認0.6,即可以使用executor的60%內存持久化數據。在緩存達到臨界值,數據可能不能緩存或寫入到磁盤。當executor經常被kill的時候,應該降低該值。
spark.yarn.Executor.memoryoverhead:該參數是在yarn模式下堆外內存的調節,默認情況下為是每一個executor的內存大小的10%
YARN-Cluster模式下JVM棧內存溢出:
JVM永久代PermGen設置 Spark.Driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"(PermGen out of Memory error log)
在spark-sql中將復雜的sql語句簡化為多個簡單的sql進行處理(JVM stack overflow)
看完上述內容,你們對如何進行spark on yarn集群調優有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。