參考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicoolhtml
運行文件有幾個G大,默認的spark的內存設置就不行了,須要從新設置。尚未看Spark源碼,只能先搜搜相關的博客解決問題。java
按照Spark應用程序中的driver分佈方式不一樣,Spark on YARN有兩種模式: yarn-client
模式、 yarn-cluster
模式。當在YARN上運行Spark做業,每一個Spark executor做爲一個YARN容器運行。Spark能夠使得多個Tasks在同一個容器裏面運行。node
配置Spark內存的文件是Spark設置裏的spark-env.sh文件,裏面詳細分類單機下,yarn-client模式下以及yarn-cluster模式下的內存設置項。bash
配置YARN內存的文件是Hadoop設置裏的yarn-site.xml文件,幾個比較經常使用的參數以下:app
yarn.app.mapreduce.am.resource.mb :AM可以申請的最大內存,默認值爲1536MB yarn.nodemanager.resource.memory-mb :nodemanager可以申請的最大內存,默認值爲8192MB yarn.scheduler.minimum-allocation-mb :調度時一個container可以申請的最小資源,默認值爲1024MB yarn.scheduler.maximum-allocation-mb :調度時一個container可以申請的最大資源,默認值爲8192MB
須要注意的是,主節點和各個從節點須要分別配置內存,能夠根據機器的狀況動態配置。我在主節點的配置爲:oop
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>81920</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>81920</value> </property> </configuration>