要保證spark on yarn的穩定性,避免報錯,就必須保證正確的配置,尤其是yarn-site.xml。
首先來理解一下yarn-site.xml各個參數的意義(引自董的博客)
注:下面<value>...</value>中的hadoop001都是我為${yarn.resourcemanager.hostname}自定義的名字
ResourceManager相關配置參數
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop001:8032</value>
</property>
ResourceManager 對客戶端暴露的地址。客戶端通過該地址向RM提交應用程序,殺死應用程序等
默認值:${yarn.resourcemanager.hostname}:8032
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop001:8030</value>
</property>
參數解釋:ResourceManager 對ApplicationMaster暴露的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等。
默認值:${yarn.resourcemanager.hostname}:8030
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop001:8088</value>
</property>
參數解釋:ResourceManager對外web ui地址。用戶可通過該地址在瀏覽器中查看集群各類信息。
默認值:${yarn.resourcemanager.hostname}:8088
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop001:8031</value>
</property>
參數解釋:ResourceManager 對NodeManager暴露的地址。NodeManager通過該地址向RM匯報心跳,領取任務等。
默認值:${yarn.resourcemanager.hostname}:8031
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop001:8033</value>
</property>
參數解釋:ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向RM發送管理命令等。
默認值:${yarn.resourcemanager.hostname}:8033
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
參數解釋:啟用的資源調度器主類。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。
默認值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
還有:
yarn.resourcemanager.resource-tracker.client.thread-count
參數解釋:處理來自NodeManager的RPC請求的Handler數目。
默認值:50
yarn.resourcemanager.scheduler.client.thread-count
參數解釋:處理來自ApplicationMaster的RPC請求的Handler數目。
默認值:50
yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb
參數解釋:單個可申請的最小/最大內存資源量。比如設置為1024和3072,則運行MapRedce作業時,每個Task最少可申請1024MB內存,最多可申請3072MB內存。
默認值:1024/8192
yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores
參數解釋:單個可申請的最小/最大虛擬CPU個數。比如設置為1和4,則運行MapRedce作業時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU。什么是虛擬CPU,可閱讀我的這篇文章:“YARN 資源調度器剖析”。
默認值:1/32
yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path
參數解釋:NodeManager黑白名單。如果發現若干個NodeManager存在問題,比如故障率很高,任務運行失敗率高,則可以將之加入黑名單中。注意,這兩個配置參數可以動態生效。(調用一個refresh命令即可)
默認值:“”
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
參數解釋:NodeManager心跳間隔
默認值:1000(毫秒)
NodeManager相關配置參數
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
yarn.nodemanager.aux-services
參數解釋:NodeManager上運行的附屬服務。需配置成mapreduce_shuffle,才可運行MapReduce程序
默認值:“”
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Whether to enable log aggregation</description>
</property>
還有
yarn.nodemanager.resource.memory-mb
參數解釋:NodeManager總的可用物理內存。注意,該參數是不可修改的,一旦設置,整個運行過程中不可動態修改。另外,該參數的默認值是8192MB,即使你的機器內存不夠8192MB,YARN也會按照這些內存來使用(傻不傻?),因此,這個值通過一定要配置。不過,Apache已經正在嘗試將該參數做成可動態修改的。
默認值:8192
yarn.nodemanager.vmem-pmem-ratio
參數解釋:每使用1MB物理內存,最多可用的虛擬內存數。
默認值:2.1
yarn.nodemanager.resource.cpu-vcores
參數解釋:NodeManager總的可用虛擬CPU個數。
默認值:8
yarn.nodemanager.local-dirs
參數解釋:中間結果存放位置,類似於1.0中的mapred.local.dir。注意,這個參數通常會配置多個目錄,已分攤磁盤IO負載。
默認值:${hadoop.tmp.dir}/nm-local-dir
yarn.nodemanager.log-dirs
參數解釋:日志存放地址(可配置多個目錄)。
默認值:${yarn.log.dir}/userlogs
yarn.nodemanager.log.retain-seconds
參數解釋:NodeManager上日志最多存放時間(不啟用日志聚集功能時有效)。
默認值:10800(3小時)