1. 程式人生 > >Hadoop Yarn記憶體使用優化配置

Hadoop Yarn記憶體使用優化配置

第一部分Hadoop Yarn記憶體使用優化配置

Hadoop2.0, YARN負責管理MapReduce中的資源(記憶體, CPU)並且將其打包成Container. 這樣可以精簡MapReduce, 使之專注於其擅長的資料處理任務將無需考慮資源排程。

    YARN會管理叢集中所有機器的可用計算資源基於這些資源YARN會排程應用(比如MapReduce)發來的資源請求然後YARN會通過分配Container來給每個應用提供處理能力, ContainerYARN中處理能力的基本單元是對記憶體, CPU等的封裝。

    Yarn架構做資源管理,在每個節點上面執行

NodeManager負責節點資源的分配,在Yarn上面Container是資源的分配的最小單元。

    Yarn叢集的記憶體分配配置在yarn-site.xml檔案中配置:

  1. <property>  
  2.     <name>yarn.nodemanager.resource.memory-mb</name>  
  3.     <value>8192</value>  
  4.     <discription>每個節點可用記憶體,單位MB</discription>  
  5. </property>  
  6. <property>  
  7.     <name>yarn.scheduler.minimum-allocation-mb</name>  
  8.     <value>1024</value>  
  9.     <discription>單個任務可申請最少記憶體,預設1024MB</discription>  
  10. </property>  
  11. <property>  
  12.     <name>yarn.scheduler.maximum-allocation-mb</name>  
  13.     <value>8192</value>  
  14.     <discription>單個任務可申請最大記憶體,預設8192MB</discription>  
  15. </property> 

Mapreduce的任務的記憶體配置:

  1. <property> 
  2. <name>mapreduce.map.memory.mb</name> 
  3. <value>1024</value> 
  4. <description>每個Map任務的實體記憶體限制</description> 
  5. </property> 
  6. <property> 
  7. <name>mapreduce.reduce.memory.mb</name> 
  8. <value>1024</value> 
  9. <description>每個Reduce任務的實體記憶體限制</description> 
  10. </property> 
  11. <property> 
  12. <name>mapred.child.java.opts</name> 
  13. <value>-Xmx1024m</value> 
  14. </property> 

其中mapreduce.map.memory.mb配置每個map任務的記憶體,應該是大於或者等於Container的最小記憶體。

按照上面的配置:每個slave可以執行map的資料<= yarn.nodemanager.resource.memory-mb/mapreduce.map.memory.mb

reduce任務的數量<=yarn.nodemanager.resource.memory-mb/mapreduce.reduce.memory.mb

第二部分Hadoop YARN配置引數剖析

一、RMNM相關引數(yarn-site.xml

1ResourceManager相關配置引數

1yarn.resourcemanager.address

引數解釋:ResourceManager 對客戶端暴露的地址。客戶端通過該地址向RM提交應用程式,殺死應用程式等。

預設值:${yarn.resourcemanager.hostname}:8032

2yarn.resourcemanager.scheduler.address

引數解釋:ResourceManager ApplicationMaster暴露的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等。

預設值:${yarn.resourcemanager.hostname}:8030

3yarn.resourcemanager.resource-tracker.address

引數解釋:ResourceManager NodeManager暴露的地址.NodeManager通過該地址向RM彙報心跳,領取任務等。

預設值:${yarn.resourcemanager.hostname}:8031

4yarn.resourcemanager.admin.address

引數解釋:ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向RM傳送管理命令等。

預設值:${yarn.resourcemanager.hostname}:8033

5yarn.resourcemanager.webapp.address

引數解釋:ResourceManager對外web ui地址。使用者可通過該地址在瀏覽器中檢視叢集各類資訊。

預設值:${yarn.resourcemanager.hostname}:8088

6yarn.resourcemanager.scheduler.class

引數解釋:啟用的資源排程器主類。目前可用的有FIFOCapacity SchedulerFair Scheduler

預設值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

7yarn.resourcemanager.resource-tracker.client.thread-count

引數解釋:處理來自NodeManagerRPC請求的Handler數目。

預設值:50

8yarn.resourcemanager.scheduler.client.thread-count

引數解釋:處理來自ApplicationMasterRPC請求的Handler數目。

預設值:50

9yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb

引數解釋:單個可申請的最小/最大記憶體資源量。比如設定為10243072,則執行MapRedce作業時,每個Task最少可申請1024MB記憶體,最多可申請3072MB記憶體。

預設值:1024/8192

10yarn.scheduler.minimum-allocation-vcores/yarn.scheduler.maximum-allocation-vcores

引數解釋:單個可申請的最小/最大虛擬CPU個數。比如設定為14,則執行MapRedce作業時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU。什麼是虛擬CPU,可閱讀我的這篇文章:“YARN 資源排程器剖析

預設值:1/32

11yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

引數解釋:NodeManager黑白名單。如果發現若干個NodeManager存在問題,比如故障率很高,任務執行失敗率高,則可以將之加入黑名單中。注意,這兩個配置引數可以動態生效。(呼叫一個refresh命令即可)

預設值:“”

12yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

引數解釋:NodeManager心跳間隔

預設值:1000(毫秒)

2NodeManager相關配置引數

1yarn.nodemanager.resource.memory-mb

引數解釋:NodeManager總的可用實體記憶體。注意,該引數是不可修改的,一旦設定,整個執行過程中不可動態修改。另外,該引數的預設值是8192MB,即使你的機器記憶體不夠8192MBYARN也會按照這些記憶體來使用(傻不傻?),因此,這個值通過一定要配置。不過,Apache已經正在嘗試將該引數做成可動態修改的。

預設值:8192

2yarn.nodemanager.vmem-pmem-ratio

引數解釋:每使用1MB實體記憶體,最多可用的虛擬記憶體數。

預設值:2.1

3yarn.nodemanager.resource.cpu-vcores

引數解釋:NodeManager總的可用虛擬CPU個數。

預設值:8

4yarn.nodemanager.local-dirs

引數解釋:中間結果存放位置,類似於1.0中的mapred.local.dir。注意,這個引數通常會配置多個目錄,已分攤磁碟IO負載。

預設值:${hadoop.tmp.dir}/nm-local-dir

5yarn.nodemanager.log-dirs

引數解釋:日誌存放地址(可配置多個目錄)。

預設值:${yarn.log.dir}/userlogs

6yarn.nodemanager.log.retain-seconds

引數解釋:NodeManager上日誌最多存放時間(不啟用日誌聚集功能時有效)。

預設值:108003小時)

7yarn.nodemanager.aux-services

引數解釋:NodeManager上執行的附屬服務。需配置成mapreduce_shuffle,才可執行MapReduce程式

預設值:“”

二、許可權與日誌聚集相關引數(yarn-site.xml

1、許可權相關配置引數

這裡的許可權由三部分組成,分別是:(1)管理員和普通使用者如何區分2)服務級別的許可權,比如哪些使用者可以向叢集提交ResourceManager提交應用程式,(3)佇列級別的許可權,比如哪些使用者可以向佇列A提交作業等。

管理員列表由引數yarn.admin.acl指定。

服務級別的許可權是通過配置hadoop-policy.xml實現的,這個與Hadoop 1.0類似。

佇列級別的許可權是由對應的資源排程器內部配置的,比如Fair Scheduler或者Capacity Scheduler等,具體見後面。

2、日誌聚集相關配置引數

日誌聚集是YARN提供的日誌中央化管理功能,它能將執行完成的Container/任務日誌上傳到HDFS上,從而減輕NodeManager負載,且提供一箇中央化儲存和分析機制。預設情況下,Container/任務日誌存在在各個NodeManager上,如果啟用日誌聚集功能需要額外的配置。

1yarn.log-aggregation-enable

引數解釋:是否啟用日誌聚集功能。

預設值:false

2yarn.log-aggregation.retain-seconds

引數解釋:在HDFS上聚集的日誌最多儲存多長時間。

預設值:-1

3yarn.log-aggregation.retain-check-interval-seconds

引數解釋:多長時間檢查一次日誌,並將滿足條件的刪除,如果是0或者負數,則為上一個值的1/10

預設值:-1

4yarn.nodemanager.remote-app-log-dir

引數解釋:當應用程式執行結束後,日誌被轉移到的HDFS目錄(啟用日誌聚集功能時有效)。

預設值:/tmp/logs

5yarn.log-aggregation.retain-seconds

引數解釋:遠端日誌目錄子目錄名稱(啟用日誌聚集功能時有效)。

預設值:日誌將被轉移到目錄${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}

三、MapReduce相關引數(mapred-site.xml

    MapReduce相關配置引數分為兩部分,分別是JobHistory Server和應用程式引數,Job History可執行在一個獨立節點上,