本教程使用虚拟机搭建共有4台 ubuntu-14.x 的主机 涉及以下节点:2个namenode, 3-datanode, 3-journalnode, 2-zookeeper, 3-zkfc, 1-ResourceManager, 3-NodeManager

以下所有的配置都是基于 /hadoop2.5.2/etc/hadoop/ 目录下

1、配置java环境:在hadoop-env.sh 中修改:

 export JAVA_HOME=/usr/ib/jvm/default-java

2、HA的配置文件在 hdfs-site.xml文件中:

 2.1、配置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.3、配置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>

3、core-site.xml 中配置:

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的默认工作目录:


<property>
    <name>hadoop.tmp.dir</name
    <value>/opt/hadoop2</value>
</property>

4、zookeeper的配置:conf目录下(此处是zookeeper的安装目录下)

 4.1 zoo-sample.cfg 文件中修改datadir属性:
 这是zookeeper的工作目录/opt/zookeeper

 4.2 zoo- 下增加:zookeeper(N)是zookeeper服务的一个标记,
     1、2、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; 

5、配置DataNode: etc/hadoop/slaves 文件中写入datanode的主机名

6、启动journalnode: sbin/hadoop-daemon.sh start journalnode;

7、格式化其中一个namenode: bin/ ./hadoop namenode -format;

 启动:sbin/ ./hadoop-daemon.sh start namenode;

8、在另外一个namenode上执行以下命令将格式化的hdfs初始文件fsimageing 拷贝到另外一个namenode上:bin/ ./hdfs namenode -bootstrapStandby;

9、在其中一个namenode节点上格式化zkfc: ./bin/hdfs zkfc -formatZK

10、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

**10、停止上面启动的节点:

./sbin/stop-dfs.sh**

**11、全面启动:

./sbin/start-dfs.sh**

idgq
575 声望13 粉丝