一. 前言:html
hadoop2.0已經公佈了穩定版本號了,添加了很是多特性,比方HDFS HA、YARN等。最新的hadoop-2.4.1又添加了YARN HAjava
注意:apache提供的hadoop-2.4.1的安裝包是在32位操做系統編譯的,因爲hadoop依賴一些C++的本地庫。
二. 準備工做:node
1.改動Linux主機名假設大家公司是租用的server或是使用的雲主機(如華爲用主機、阿里雲主機等)shell
/etc/hosts裏面要配置的是內網IP地址和主機名的映射關係apache
4.關閉防火牆Active NameNode對外提供服務,而Standby NameNode則不正確外提供服務。僅同步active namenode的狀態,以即可以在它失敗時高速進行切換。
vim
hadoop2.0官方提供了兩種HDFS HA的解決方式,一種是NFS。還有一種是QJM。這裏咱們使用簡單的QJM。瀏覽器
在該方案中。主備NameNode之間經過一組JournalNode同步元數據信息,一條數據僅僅要成功寫入多數JournalNode即以爲寫入成功。一般配置奇數個JournalNode框架
2.hadoop-2.2.0中依舊存在一個問題,就是ResourceManager僅僅有一個,存在單點故障,hadoop-2.4.1攻克了這個問題,有兩個ResourceManager,一個是Active。一個是Standby,狀態由zookeeper進行協調ssh
echo 1 > /itcast/zookeeper-3.4.5/tmp/myidide
2.2.2改動core-site.xml
<configuration> <!-- 指定hdfs的nameservice爲ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop暫時文件夾 --> <property> <name>hadoop.tmp.dir</name> <value>/itcast/hadoop-2.4.1/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>itcast05:2181,itcast06:2181,itcast07:2181</value> </property> </configuration>
2.2.3改動hdfs-site.xml
<configuration> <!--指定hdfs的nameservice爲ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1如下有兩個NameNode。各自是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>itcast01:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>itcast01:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>itcast02:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>itcast02:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://itcast05:8485;itcast06:8485;itcast07:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/itcast/hadoop-2.4.1/journal</value> </property> <!-- 開啓NameNode失敗本身主動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗本身主動切換實現方式 --> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制方法,多個機制用換行切割,即每個機制暫用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔離機制時需要ssh免登錄 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
2.2.4改動mapred-site.xml
<configuration> <!-- 指定mr框架爲yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
2.2.5改動yarn-site.xml
<configuration> <!-- 開啓RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分別指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>itcast03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>itcast04</value> </property> <!-- 指定zk集羣地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>itcast05:2181,itcast06:2181,itcast07:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2.2.6改動slaves(slaves是指定子節點的位置,因爲要在itcast01上啓動HDFS、在itcast03啓動yarn。
因此itcast01上的slaves文件指定的是datanode的位置,itcast03上的slaves文件指定的是nodemanager的位置)
itcast05ssh-copy-id itcast07
scp -r /itcast/hadoop-2.4.1/ root@itcast07:/itcast/
#格式化後會在依據core-site.xml中的hadoop.tmp.dir配置生成個文件。
這裏我配置的是/itcast/hadoop-2.4.1/tmp,
而後將/itcast/hadoop-2.4.1/tmp複製到itcast02的/itcast/hadoop-2.4.1/下。
scp -r tmp/ itcast02:/itcast/hadoop-2.4.1/2.10啓動YARN(#####注意#####:是在itcast03上運行start-yarn.sh,
把namenode和resourcemanager分開是因爲性能問題。因爲他們都要佔用大量資源,因此把他們分開了。
他們分開了就要分別在不一樣的機器上啓動)
sbin/start-yarn.sh
五. 集羣測試:
到此,hadoop-2.4.1配置完成,可以統計瀏覽器訪問:手動啓動那個掛掉的NameNode sbin/hadoop-daemon.sh start namenode 經過瀏覽器訪問:http://192.168.1.201:50070 NameNode 'itcast01:9000' (standby) 驗證YARN: 執行一下hadoop提供的demo中的WordCount程序: hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out