1. 程式人生 > >hadoop之MapReduce架構及Yarn環境搭建

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有了一個對應的資源容器之後就會開始執行

執行的時候Application MasterNodeManager之間還有一個執行狀態的彙報,然後NodeManagerResourceManager彙報

具體程式的執行過程:

    客戶端把計算程式(一個jar包)提交給ResourceManagerResourceManagerjar程式向各個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

<configuration>

<!-- Site specific YARN configuration properties -->

<property>

  <name>yarn.resourcemanager.ha.enabled</name>

  <value>true</value>

</property>

<property>

  <name>yarn.resourcemanager.cluster-id</name>

  <value>jeffSheng</value>

</property>

<property>

  <name>yarn.resourcemanager.ha.rm-ids</name>

  <value>rm1,rm2</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname.rm1</name>

  <value>node1</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname.rm2</name>

  <value>node4</value>

</property>

<property>

  <name>yarn.resourcemanager.webapp.address.rm1</name>

  <value>node1:18088</value>

</property>

<property>

  <name>yarn.resourcemanager.webapp.address.rm2</name>

  <value>node4:18088</value>

</property>

<property>

  <name>yarn.resourcemanager.zk-address</name>

  <value>node1:2181,node2:2181,node3:2181</value>

</property>

</configuration>

儲存退出!

然後,開啟/root/hadoop-2.5.1/etc/hadoop/mapred-site.xml:

<configuration>
 <property>
 <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
</configuration>

此配置的作用是把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

在節點下加入以下屬性儲存退出:

<property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

配置完成,我們是在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彙報。