Hadoop Yarn記憶體使用優化配置
第一部分Hadoop Yarn記憶體使用優化配置
在Hadoop2.0中, YARN負責管理MapReduce中的資源(記憶體, CPU等)並且將其打包成Container. 這樣可以精簡MapReduce, 使之專注於其擅長的資料處理任務, 將無需考慮資源排程。
YARN會管理叢集中所有機器的可用計算資源. 基於這些資源YARN會排程應用(比如MapReduce)發來的資源請求, 然後YARN會通過分配Container來給每個應用提供處理能力, Container是YARN中處理能力的基本單元, 是對記憶體, CPU等的封裝。
Yarn架構做資源管理,在每個節點上面執行
Yarn叢集的記憶體分配配置在yarn-site.xml檔案中配置:
- <property>
- <name>yarn.nodemanager.resource.memory-mb</name>
- <value>8192</value>
- <discription>每個節點可用記憶體,單位MB</discription>
- </property>
- <property>
- <name>yarn.scheduler.minimum-allocation-mb</name>
- <value>1024</value>
- <discription>單個任務可申請最少記憶體,預設1024MB</discription>
- </property>
- <property>
- <name>yarn.scheduler.maximum-allocation-mb</name>
- <value>8192</value>
- <discription>單個任務可申請最大記憶體,預設8192MB</discription>
- </property>
而Mapreduce的任務的記憶體配置:
- <property>
- <name>mapreduce.map.memory.mb</name>
- <value>1024</value>
- <description>每個Map任務的實體記憶體限制</description>
- </property>
- <property>
- <name>mapreduce.reduce.memory.mb</name>
- <value>1024</value>
- <description>每個Reduce任務的實體記憶體限制</description>
- </property>
- <property>
- <name>mapred.child.java.opts</name>
- <value>-Xmx1024m</value>
- </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配置引數剖析
一、RM與NM相關引數(yarn-site.xml)
1、ResourceManager相關配置引數
(1)yarn.resourcemanager.address
引數解釋:ResourceManager 對客戶端暴露的地址。客戶端通過該地址向RM提交應用程式,殺死應用程式等。
預設值:${yarn.resourcemanager.hostname}:8032
(2)yarn.resourcemanager.scheduler.address
引數解釋:ResourceManager 對ApplicationMaster暴露的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等。
預設值:${yarn.resourcemanager.hostname}:8030
(3)yarn.resourcemanager.resource-tracker.address
引數解釋:ResourceManager 對NodeManager暴露的地址.。NodeManager通過該地址向RM彙報心跳,領取任務等。
預設值:${yarn.resourcemanager.hostname}:8031
(4)yarn.resourcemanager.admin.address
引數解釋:ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向RM傳送管理命令等。
預設值:${yarn.resourcemanager.hostname}:8033
(5)yarn.resourcemanager.webapp.address
引數解釋:ResourceManager對外web ui地址。使用者可通過該地址在瀏覽器中檢視叢集各類資訊。
預設值:${yarn.resourcemanager.hostname}:8088
(6)yarn.resourcemanager.scheduler.class
引數解釋:啟用的資源排程器主類。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。
預設值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
(7)yarn.resourcemanager.resource-tracker.client.thread-count
引數解釋:處理來自NodeManager的RPC請求的Handler數目。
預設值:50
(8)yarn.resourcemanager.scheduler.client.thread-count
引數解釋:處理來自ApplicationMaster的RPC請求的Handler數目。
預設值:50
(9)yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb
引數解釋:單個可申請的最小/最大記憶體資源量。比如設定為1024和3072,則執行MapRedce作業時,每個Task最少可申請1024MB記憶體,最多可申請3072MB記憶體。
預設值:1024/8192
(10)yarn.scheduler.minimum-allocation-vcores/yarn.scheduler.maximum-allocation-vcores
引數解釋:單個可申請的最小/最大虛擬CPU個數。比如設定為1和4,則執行MapRedce作業時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU。什麼是虛擬CPU,可閱讀我的這篇文章:“YARN 資源排程器剖析”。
預設值:1/32
(11)yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path
引數解釋:NodeManager黑白名單。如果發現若干個NodeManager存在問題,比如故障率很高,任務執行失敗率高,則可以將之加入黑名單中。注意,這兩個配置引數可以動態生效。(呼叫一個refresh命令即可)
預設值:“”
(12)yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
引數解釋:NodeManager心跳間隔
預設值:1000(毫秒)
2、NodeManager相關配置引數
(1)yarn.nodemanager.resource.memory-mb
引數解釋:NodeManager總的可用實體記憶體。注意,該引數是不可修改的,一旦設定,整個執行過程中不可動態修改。另外,該引數的預設值是8192MB,即使你的機器記憶體不夠8192MB,YARN也會按照這些記憶體來使用(傻不傻?),因此,這個值通過一定要配置。不過,Apache已經正在嘗試將該引數做成可動態修改的。
預設值:8192
(2)yarn.nodemanager.vmem-pmem-ratio
引數解釋:每使用1MB實體記憶體,最多可用的虛擬記憶體數。
預設值:2.1
(3)yarn.nodemanager.resource.cpu-vcores
引數解釋:NodeManager總的可用虛擬CPU個數。
預設值:8
(4)yarn.nodemanager.local-dirs
引數解釋:中間結果存放位置,類似於1.0中的mapred.local.dir。注意,這個引數通常會配置多個目錄,已分攤磁碟IO負載。
預設值:${hadoop.tmp.dir}/nm-local-dir
(5)yarn.nodemanager.log-dirs
引數解釋:日誌存放地址(可配置多個目錄)。
預設值:${yarn.log.dir}/userlogs
(6)yarn.nodemanager.log.retain-seconds
引數解釋:NodeManager上日誌最多存放時間(不啟用日誌聚集功能時有效)。
預設值:10800(3小時)
(7)yarn.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上,如果啟用日誌聚集功能需要額外的配置。
(1)yarn.log-aggregation-enable
引數解釋:是否啟用日誌聚集功能。
預設值:false
(2)yarn.log-aggregation.retain-seconds
引數解釋:在HDFS上聚集的日誌最多儲存多長時間。
預設值:-1
(3)yarn.log-aggregation.retain-check-interval-seconds
引數解釋:多長時間檢查一次日誌,並將滿足條件的刪除,如果是0或者負數,則為上一個值的1/10。
預設值:-1
(4)yarn.nodemanager.remote-app-log-dir
引數解釋:當應用程式執行結束後,日誌被轉移到的HDFS目錄(啟用日誌聚集功能時有效)。
預設值:/tmp/logs
(5)yarn.log-aggregation.retain-seconds
引數解釋:遠端日誌目錄子目錄名稱(啟用日誌聚集功能時有效)。
預設值:日誌將被轉移到目錄${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}下
三、MapReduce相關引數(mapred-site.xml)
MapReduce相關配置引數分為兩部分,分別是JobHistory Server和應用程式引數,Job History可執行在一個獨立節點上,