hadoop之MapReduce架構及Yarn環境搭建
MapReduce架構
基於hadoop2.0架構是運行於YARN環境的。
YARN環境-主從結構
整個yarn環境是MapReduce的執行環境
- 主節點Resource Manager
負責排程,是Resource Manager,給Node Manager的ApplicationMaster分配資源,分配好之後,ApplicationMaster就有一個Container,Container是資源的統稱。
- 從節點Node manager
負責執行緒執行,是Node manager,即任務是執行在有資料的節點上,因為資料在DataNode上,所以Node manager和DataNode在同一個機器上。Node Manager是負責執行緒執行,或者任務執行,是通過application Master負責任務執行,它是屬於Node Manager的一個元件,application Master執行的時候從Resource Manager申請資源。Node manager實時彙報自己的節點情況給Resource Manager。
- Container容器
NodeManager的元件之一,資源的組合或者資源容器。
- Application Master
NodeManager的元件之一,當Map Task開始執行的時候,NodeManager產生一個Application Master來負責執行緒任務的執行,執行前向Resource Manager去申請資源,Resource Manager是知道各個節點的資源情況的,因為NodeManager會實時彙報自己節點的資源情況,如果Node Manager上有空閒的資源,Node Manager就會生成一個Container資源容器,Application Master有了一個對應的資源容器之後就會開始執行
具體程式的執行過程:
客戶端把計算程式(一個jar包)提交給ResourceManager,ResourceManager把jar程式向各個NodeManager上覆制。NodeManager會建立一個Application Master去執行map Task。
執行前去ResourceManager請求資源。
Tips:以上YARN環境,我們一般是不會改動的。我們只需要做的是計算程式的開發。
YARN-HA環境搭建
可以看到ResourceManager做了主備切換,通過zk選舉出備。在主機宕機時進行故障轉移。
ResourceManager上沒有資料,直接切換即可。比NameNode的HA簡單很多。
配置說明:
啟用ResourceManager高可用
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
配置兩個ResourceManager的服務編號,cluster1為NameServiceId,服務ID號
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
配置兩個ResourceManager的Id號
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
配置rm1的主機
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
配置rm2的主機
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>master2:8088</value>
</property>
配置zk是哪些機器
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
進去hadoop的配置檔案目錄:
#cd /root/hadoop-2.5.1/etc/hadoop
#vim yarn-site.xml
|
儲存退出!
然後,開啟/root/hadoop-2.5.1/etc/hadoop/mapred-site.xml:
|
此配置的作用是把MapReduce的執行環境設定在yarn環境中
可以看到在配置目錄下只有一個模板檔案,所以我們需要重新命名一下
#mv mapred-site.xml.template mapred-site.xml
#vim mapred-site.xml
將上邊配置貼上進去,儲存退出
還需要配置一個
/root/hadoop-2.5.1/etc/hadoop/yarn-site.xml:
#vim yarn-site.xml
在節點下加入以下屬性儲存退出:
|
配置完成,我們是在node1上配置,將配置檔案配置到其他機器上node2,node3,node4。
注意:其實node2,node2,node4,就是datanode節點,也就是我們的NodeManager節點。他們一定是同一臺機器上。
拷貝:
[[email protected] hadoop]# pwd
/root/hadoop-2.5.1/etc/hadoop
[[email protected] hadoop]# scp ./* [email protected]:/root/hadoop-2.5.1/etc/hadoop/
在node1上執行:
# start-yarn.sh
可以看到就啟動了一個ResourceManager是node1,和三個nodeManager分別是node2,node3和node4
那麼,那個備用的ResourceManager啟動了沒有,答案是沒有,因為start-yarn.sh
不會幫助啟動備用ResourceManager,需要我們自己手動啟動。
由於我們是node4是備用ResourceManagerManager機器,我們在node4上輸入:
# yarn-daemon.sh start resourcemanager
啟動成功!
開啟ResourceManager的監控頁面:
點選左側選單Nodes,也可以看到三臺NodeManager的節點資訊
然後我們開啟備用的ResourceManager,也就是node4,192.168.98.98這臺機器:
卻發現提示以下資訊:
This is standby RM. Redirecting to the current active RM: http://node1:18088/
緊接著就重定向到了node1那個主的Resource機器
Tips:在windows上配置node1到node4的域名:開啟C:\Windows\System32\drivers\etc,編輯hosts檔案。
輸入:
192.168.98.95 node1
192.168.98.96 node2
192.168.98.97 node3
192.168.98.98 node4
然後我們驗證是否node1這個ResourceManager掛掉,node4的備用ResourceManager是否可以接管。
殺死了node1,發現node1的web介面不能訪問了,node4可以!
Node4接管node1的ResourceManager成功,需要注意的是接管可能需要幾秒鐘,其實就是NodeManager向ResourceManager彙報節點狀態有一個超時時間,我們把node1殺死後,nodeManager還是在向Node1的resourceManager彙報,雖然是不成功的,等到超時時間到了還不成功,則認為node1這個ResourceManager掛掉了,將向node4這個ResourceManager彙報。