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