本教程使用虛擬機搭建共有4臺 ubuntu-14.x 的主機 涉及如下節點:2個namenode, 3-datanode, 3-journalnode, 2-zookeeper, 3-zkfc, 1-ResourceManager, 3-NodeManagerjava
如下全部的配置都是基於 /hadoop2.5.2/etc/hadoop/ 目錄下node
一、配置java環境:在hadoop-env.sh 中修改:linux
export JAVA_HOME=/usr/ib/jvm/default-java
二、HA的配置文件在 hdfs-site.xml文件中:shell
2.一、配置HA的命名服務: 命名空間的邏輯名稱。若是使用HDFS Federation, 能夠配置多個命 名空間的名稱,使用逗號分開便可。 <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> 2.2 配置全部namenode名字:命名空間中全部NameNode的惟一標示名稱。 能夠配置多個,使用逗號分隔。該名稱是可讓DataNode知道每一個集羣的全部NameNode。 當前,每一個集羣最多隻能配置兩個NameNode。 <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> 2.三、配置namenode的 rpc協議端口和主機:每一個namenode監聽的RPC地址 <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>machine1.example.com:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>machine2.example.com:8020</value> </property> 2.4 配置namenode的http協議的端口和主機:每一個namenode監聽的http地址, 若是啓用了安全策略, 也應該對每一個namenode配置htts-address信息,與此相似。 <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>machine1.example.com:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>machine2.example.com:50070</value> </property> 2.5 配置journalNodes的的地址: 這是NameNode讀寫JournalNode組的URI, 經過這個URI NameNode能夠讀取edit log中的內容, URI的格式: journal://host1:post1;host2:post2;host3:post3/mycluster, 其中host(N)是journalNode的地址,至少三個,且是奇數個,mycluster:是集羣的惟一標示 <property> <name>dfs.namenode.shared.edits.dir</name <value>qjournal://host1:post1;host2:post2;host3:post3/mycluster</value> </property> 2.6 配置HDFS客服端的java類:這是配置HDFS客戶端鏈接到Active NameNode的一個java類 <property> <name>dfs.client.failover.proxy.provider.mycluster</nam> <value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value> </property> 2.7 配置active NameNode出錯時的處理類:當active namenode出錯時通常須要關閉該進程,處理方式能夠是ssh 也能夠是shell. 指定私鑰的位置若是使用ssh,配置以下: <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/exampleuser/.ssh/id_rsa</value> </property> 2.8 配置journalNode的工做目錄:這是JournalNode進程保持邏輯狀態的路徑。這是在linux服務器文件的絕對路徑。 <property> <name>dfs.journalnode.edits.dir</name <value>/path/to/journal/node/local/data</value> </property> 2.9 配置NameNode的自動切換: <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
三、core-site.xml 中配置:apache
3.1 配置NameNode的入口: <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> 3.2 配置zookeeper: <property> <name>ha.zookeeper.quorum</name <value>zk1:2181,zk2:2181,zk3:2181</value> </property>
3.3 修改hdfs的默認工做目錄:bootstrap
<property> <name>hadoop.tmp.dir</name <value>/opt/hadoop2</value> </property>
四、zookeeper的配置:conf目錄下(此處是zookeeper的安裝目錄下)ubuntu
4.1 zoo-sample.cfg 文件中修改datadir屬性: 這是zookeeper的工做目錄/opt/zookeeper 4.2 zoo- 下增長:zookeeper(N)是zookeeper服務的一個標記, 一、二、3是zookeeper服務的num,須要在datadir中指定 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 4.3: 在 /opt/zookeeper下建立myid文件: mkdir /opt/zookeeper; vim maid 4.4: 在zookeeper/conf/ 目錄下執行: cp -a zoo-sample.cfg zoo.cfg 4.5: zkServer.sh start 啓動zookeeper;
五、配置DataNode: etc/hadoop/slaves 文件中寫入datanode的主機名vim
六、啓動journalnode: sbin/hadoop-daemon.sh start journalnode;安全
七、格式化其中一個namenode: bin/ ./hadoop namenode -format;服務器
啓動:sbin/ ./hadoop-daemon.sh start namenode;
八、在另一個namenode上執行如下命令將格式化的hdfs初始文件fsimageing 拷貝到另一個namenode上:bin/ ./hdfs namenode -bootstrapStandby;
九、在其中一個namenode節點上格式化zkfc: ./bin/hdfs zkfc -formatZK
十、yarn的配置:
配置ResourceManager:mapreduce-site.xml: <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 配置NodeManager: yarn-site.xml: <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> 啓動:./sbin/start-yarn.sh
**十、中止上面啓動的節點:
./sbin/stop-dfs.sh**
**十一、全面啓動:
./sbin/start-dfs.sh**