本教程使用虚拟机搭建共有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**