簡介
Yet Another Resource Negotiator ,負責整個集群資源的調度,和管理,支持多框架資源統一調度(HIVE spark flink)
開啟yarn
安裝hadoop,可以看我之前的博文 這邊就不講了
編輯 etc/hadoop/mapred-site.xml: 添加如下配置
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
編輯 etc/hadoop/yarn-site.xml: 添加如下配置
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
啟動 RM 和 NM
Start ResourceManager daemon and NodeManager daemon: $ sbin/start-yarn.sh
關閉Yarn
sbin/stop-yarn.sh
打開瀏覽器訪問:http://192.168.1.100:8088/cluster
模塊簡介
ResourceManager (RM)
客戶端提交作業到 RM, RM對應多個 NM ,RM是集群中對外提供的服務,同一時刻只有一個負責資源相關處理,客戶端任務來了之后,先啟動AM 然后監控AM。 並且還監控NM
ApplicationMaster(AM)
運行在NodeManager里面的,去RM里面申請資源用於在NM上啟動對應的task ,每個應用程序對應一個AM.。 並且做數據的切分,為每個task向RM申請資源。並且和NM通信。
NodeManager(NM)
真正工作計算的節點,同時向RM發送心跳信息 任務執行情況。接受來自RM的請求 並且處理AM的命令。
Container
對於任務的運行抽象,一個Container既可以運行AM 也可以運行具體的 map 和 reduce
yarn的基本流程
- client向yarn提交job,首先找ResourceManager分配資源,
- ResourceManager開啟一個Container,在Container中運行一個Application manager
- Application manager找一台nodemanager啟動Application master,計算任務所需的計算
- Application master向Application manager(Yarn)申請運行任務所需的資源
- Resource scheduler將資源封裝發給Application master
- Application master將獲取到的資源分配給各個nodemanager
- 各個nodemanager得到任務和資源開始執行map task
- map task執行結束后,開始執行reduce task
- map task和 reduce task將執行結果反饋給Application master
- Application master將任務執行的結果反饋application manager
把作業提交到 yarn上面
自己的MapReduce 首先打成個jar包 傳到服務器 然后執行
hadoop jar xxx.jar me.liangtian.App param1 param2
問題排查
我這邊一直報錯: **Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out. **
可能是下面幾點造成的
- 系統設置有關,文件較大,無法分配大內存
- 機器位數是64位導致這個問題
- /etc/hosts 里面沒有配master的hostname
- 防火牆沒關
- 臨時目錄問題
問題1我安裝網上方法,對配置文件做了修改: vim /etc/security/limits.conf 加入 * soft nofile 102400 * hard nofile 409600 vim /etc/pam.d/login 加入:session required /lib/security/pam_limits.so但是還是沒有辦法解決
問題三:由於我是偽分布式,所以只要配本機就行,看了下配置了hostname
問題四:setup下看了我的防火牆,發現防火牆有兩個,一個是firework一個是selinux,第一個關了,第二個沒關 關了還是不行
最后發現是問題五: yarn.nodemanager.local-dirs對應的路徑必須在hdfs-site.xml中的hadoop.tmp.dir路徑下,否則yarn會報錯找不到緩存文件 需要修改 yarn-site.xml 加上對應的文件目錄
<property> <name>yarn.nodemanager.local-dirs</name> <value>hadoop.tmp.dir/nm-local-dir</value> </property>

