參考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool
運行文件有幾個G大,默認的spark的內存設置就不行了,需要重新設置。還沒有看Spark源碼,只能先搜搜相關的博客解決問題。
按照Spark應用程序中的driver分布方式不同,Spark on YARN有兩種模式: yarn-client 模式、 yarn-cluster模式。當在YARN上運行Spark作業,每個Spark executor作為一個YARN容器運行。Spark可以使得多個Tasks在同一個容器里面運行。
配置Spark內存的文件是Spark設置里的spark-env.sh文件,里面詳細分類單機下,yarn-client模式下以及yarn-cluster模式下的內存設置項。
配置YARN內存的文件是Hadoop設置里的yarn-site.xml文件,幾個比較常用的參數如下:
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
需要注意的是,主節點和各個從節點需要分別配置內存,可以根據機器的情況動態配置。我在主節點的配置為:
<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>
