Hadoop Yarn内存使用优化配置
第一部分Hadoop Yarn內存使用優化配置
? ??在Hadoop2.0中, YARN負責管理MapReduce中的資源(內存, CPU等)并且將其打包成Container.?這樣可以精簡MapReduce,?使之專注于其擅長的數據處理任務,?將無需考慮資源調度。
? ??YARN會管理集群中所有機器的可用計算資源.?基于這些資源YARN會調度應用(比如MapReduce)發來的資源請求,?然后YARN會通過分配Container來給每個應用提供處理能力, Container是YARN中處理能力的基本單元,?是對內存, CPU等的封裝。
? ??Yarn架構做資源管理,在每個節點上面運行NodeManager負責節點資源的分配,在Yarn上面Container是資源的分配的最小單元。
? ? Yarn集群的內存分配配置在yarn-site.xml文件中配置:
? ??而Mapreduce的任務的內存配置:
? ??其中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可運行在一個獨立節點上,而應用程序參數則可存放在mapred-site.xml中作為默認參數,也可以在提交應用程序時單獨指定,注意,如果用戶指定了參數,將覆蓋掉默認參數。
? ??以下這些參數全部在mapred-site.xml中設置。
1、MapReduce JobHistory相關配置參數
? ??在JobHistory所在節點的mapred-site.xml中配置。
(1)mapreduce.jobhistory.address
參數解釋:MapReduce JobHistory Server地址。
默認值:?0.0.0.0:10020
(2)mapreduce.jobhistory.webapp.address
參數解釋:MapReduce JobHistory Server Web UI地址。
默認值:?0.0.0.0:19888
(3)mapreduce.jobhistory.intermediate-done-dir
參數解釋:MapReduce作業產生的日志存放位置。
默認值:?/mr-history/tmp
(4)mapreduce.jobhistory.done-dir
參數解釋:MR JobHistory Server管理的日志的存放位置。
默認值:?/mr-history/done
2、MapReduce作業配置參數
? ??可在客戶端的mapred-site.xml中配置,作為MapReduce作業的缺省配置參數。也可以在作業提交時,個性化指定這些參數。
| 參數名稱 | 缺省值 | 說明 |
| mapreduce.job.name | | 作業名稱 |
| mapreduce.job.priority | NORMAL | 作業優先級 |
| yarn.app.mapreduce.am.resource.mb | 1536 | MR ApplicationMaster占用的內存量 |
| yarn.app.mapreduce.am.resource.cpu-vcores | 1 | MR ApplicationMaster占用的虛擬CPU個數 |
| mapreduce.am.max-attempts | 2 | MR ApplicationMaster最大失敗嘗試次數 |
| mapreduce.map.memory.mb | 1024 | 每個Map Task需要的內存量 |
| mapreduce.map.cpu.vcores | 1 | 每個Map Task需要的虛擬CPU個數 |
| mapreduce.map.maxattempts | 4 | Map Task最大失敗嘗試次數 |
| mapreduce.reduce.memory.mb | 1024 | 每個Reduce Task需要的內存量 |
| mapreduce.reduce.cpu.vcores | 1 | 每個Reduce Task需要的虛擬CPU個數 |
| mapreduce.reduce.maxattempts | 4 | Reduce Task最大失敗嘗試次數 |
| mapreduce.map.speculative | false | 是否對Map Task啟用推測執行機制 |
| mapreduce.reduce.speculative | false | 是否對Reduce Task啟用推測執行機制 |
| mapreduce.job.queuename | default | 作業提交到的隊列 |
| mapreduce.task.io.sort.mb | 100 | 任務內部排序緩沖區大小 |
| mapreduce.map.sort.spill.percent | 0.8 | Map階段溢寫文件的閾值(排序緩沖區大小的百分比) |
| mapreduce.reduce.shuffle.parallelcopies | 5 | Reduce Task啟動的并發拷貝數據的線程數目 |
? ??注意,MRv2重新命名了MRv1中的所有配置參數,但兼容MRv1中的舊參數,只不過會打印一條警告日志提示用戶參數過期。MapReduce新舊參數對照表可參考Java類org.apache.hadoop.mapreduce.util.ConfigUtil,舉例如下:
| 過期參數名 | 新參數名 |
| mapred.job.name | mapreduce.job.name |
| mapred.job.priority | mapreduce.job.priority |
| mapred.job.queue.name | mapreduce.job.queuename |
| mapred.map.tasks.speculative.execution | mapreduce.map.speculative |
| mapred.reduce.tasks.speculative.execution | mapreduce.reduce.speculative |
| io.sort.factor | mapreduce.task.io.sort.factor |
| io.sort.mb | mapreduce.task.io.sort.mb |
四、Fair Scheduler相關參數
? ??參考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-fair-scheduler/
五、Capacity Scheduler相關參數
? ? Capacity Scheduler是YARN中默認的資源調度器。
? ??參考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-capacity-scheduler/
?
總結
以上是生活随笔為你收集整理的Hadoop Yarn内存使用优化配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 很多未解之谜终于有答案了——2018年J
- 下一篇: 什么鬼?弃用JDK动态代理,Spring