Hadoop HA环境搭建


      本文搭建环境以普通用户运行Hadoop集群环境,同时为了保留软件版本号,方便日后升级,所有解压目录都创建软连接,同时在环境变量/etc/profile~/.bash_profile文件中引用的路径都为软连接路径,这样升级方便:

 

1、环境分配:【打钩的表示该主机上运行该功能】

 
 
  1. NN:表示NameNode,和SecondNameDode,这里的Spark-master主NameNode、SecondNameDode在 
  2. Spark-slave1主机上。 
  3. DN:表示DataNode,有三个节点分别在Slave【1、2、3】上。 
  4. ZK:表示ZeeKeeper ,以单节点数。【可1、或3、5等】。 
  5. ZKFC:NameNode在哪ZKFC就在哪。【必须】 
  6. JN:journalnode作为共享,集群有高可用。 
  7. RM:Mapreduce主程序,ResourceManager放到NameNode上【选择少服务的主机】。 
  8. DM:最好跟DataNode在同一节点上。【为Mapreduce分配任务】 
 
2、软件版本:
jdk-7u79-linux-x64.gz、hadoop-2.5.2.tar.gz、hadoop-native-64-2.4.0.tar
 
注:hadoop-native-64-2.4.0.tar 是为了解决运行dfs时的一个WARN 提示:
 
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
用法:把它解压到hadoop的/lib/目录下即可。【适合2.5.2,其它版本未测试过】
 
3、建立用户:
 
  1. useradd swper 
  2. echo “123456”|passwd --stdin swper 
 
切换到swper用户目录下,并上软件到主目录下,并在主目录下建立一个安装所需软件的目录。
 
  1. su swper 
  2. mkdir /app 
  3. 解压软件到/app目录下,并创建对应的软连接: 
  4. tar xf hadoop-2.5.2.tar.gz app/ 
  5. tar xf jdk-7u79-linux-x64.gz  app/ 
  6.  
  7. 建立软连接: 
  8. cd app/ 
  9. ln -s hadoop-2.5.2/ hadoop 
  10. ln -s jdk1.7.0_79/ java 
配置环境变量:可修改~/.bash_profile或者/etc/profile文件:
 
  1. #HDFS configuration at 20160411 
  2. #JAVA configuration 
  3. export JAVA_HOME=/home/swper/app/java 
  4. export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
  5. export PATH=$PATH:$JAVA_HOME/bin 
  6.  
  7. #Hadoop configuration 
  8. export HADOOP_HOME=/home/swper/app/hadoop 
  9. export YARN_HOME=$HADOOP_HOME 
  10.  
  11. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
  12. export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop 
  13. export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop 
  14.  
  15. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 
 
4、修改配置文件:进入目录:cd app/hadoop/etc/hadoop/
建立目录:mkdir /home/swper/app/hadoop/tmp
1)core-site.xml
 
  1. <configuration> 
  2.     <property> 
  3.        <name>ha.zookeeper.quorum</name> 
  4.        <value>spark-master:2181,spark-slave1:2181,spark-slave2:2181</value> 
  5.      </property> 
  6.  
  7.     <property> 
  8.        <name>hadoop.tmp.dir</name> 
  9.        <value>/home/swper/app/hadoop/tmp</value> 
  10.      </property> 
  11.  
  12. </configuration> 
2)hdfs-site.xml
 
  1. <configuration> 
  2.     <property> 
  3.       <name>dfs.nameservices</name> 
  4.       <value>mycluster</value> 
  5.     </property> 
  6.     <property> 
  7.       <name>dfs.ha.namenodes.mycluster</name> 
  8.       <value>nn1,nn2</value> 
  9.     </property> 
  10.     <property> 
  11.       <name>dfs.namenode.rpc-address.mycluster.nn1</name> 
  12.       <value>spark-master:8020</value> 
  13.     </property> 
  14.     <property> 
  15.       <name>dfs.namenode.rpc-address.mycluster.nn2</name> 
  16.       <value>spark-slave1:8020</value> 
  17.     </property> 
  18.     <property> 
  19.       <name>dfs.namenode.http-address.mycluster.nn1</name> 
  20.       <value>spark-master:50070</value> 
  21.     </property> 
  22.     <property> 
  23.       <name>dfs.namenode.http-address.mycluster.nn2</name> 
  24.       <value>spark-slave1:50070</value> 
  25.     </property> 
  26.     <property> 
  27.       <name>dfs.namenode.shared.edits.dir</name> 
  28.       <value>qjournal://spark-slave1:8485;spark-slave2:8485;spark-slave3:8485/mycluster</value> 
  29.     </property> 
  30.     <property> 
  31.       <name>dfs.client.failover.proxy.provider.mycluster</name> 
  32.       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
  33.     </property> 
  34.     <property> 
  35.       <name>dfs.ha.fencing.methods</name> 
  36.       <value>sshfence</value> 
  37.     </property> 
  38.     <property> 
  39.       <name>dfs.ha.fencing.ssh.private-key-files</name> 
  40.       <value>/home/swper/.ssh/id_rsa</value> 
  41.     </property> 
  42.     <property> 
  43.        <name>dfs.ha.automatic-failover.enabled</name> 
  44.        <value>true</value> 
  45.      </property> 
  46. </configuration> 
 
3)安装zookeeper-3.4.6
 
  1. tar xf zookeeper-3.4.6.tar.gz -C /home/swper/app/ 
  2. cd /home/swper/app/ 
  3. ln -s zookeeper-3.4.6/ zookeeper 
  4. cd zookeeper/conf/ 
  5. 建立目录: 
  6. mkdir -p /home/swper/app/zookeeper/data 
 
【复制一份zoo_sample.cfg改名为zoo.cfg】
修改下面配置:【由于上面的规则,zk_server只在以下三台机器运行】
 
  1. dataDir=/home/swper/app/zookeeper/data 
  2.  
  3. server.1=spark-master:2888:3888 
  4. server.2=spark-slave1:2888:3888 
  5. server.3=spark-slave2:2888:3888 
注:修改完后要在dataDir目录下建立一个文件名叫:myid 并根据上面配置填ID。每个节点都要对应,根据主机名和前面的ID相对应。
 
创建完后,先在每个节点上启动zkServer,进入bin目录:【上面三台节点都要启动】
 
  1. ./zkServer.sh start 
 
4)hadoop-env.sh和yarn-env.sh都要加入JAVA的路径:
 
  1. export JAVA_HOME=/home/swper/app/java 
5)slaves  #【填上运行DataNode的的主机名】
 
  1. spark-slave1 
  2. spark-slave2 
  3. spark-slave3 
 
完成上面的配置后接下来按顺序启动:
 
1、启动journalnode:在spark-slave1、spark-slave2、spark-slave3 【根据上面的规则,三台机都要启动】
 
  1. /home/swper/app/hadoop/sbin/hadoop-daemon.sh start journalnode 
2、格式化zk不然下边启动dfs时会报错,进入随便一个NameNode主机上,执行以下命令:
 
  1. cd /home/swper/app/hadoop/bin 
  2. ./hdfs zkfc -formatZK 
格式化zk,只需在其中一台NameNode主机上执行命令:
 
 
3、格式化第一个NameNode,查看提示是否成功,并检查是否创建了NameNode的元数据。
 
 
并且启动第一个格式化的NameNode,因为要把元数据同步到第二个NameNode;
 
 
4、回到另一台NameNode主机上执行命令:
 
  1. cd /home/swper/app/hadoop/bin 
  2. ./hdfs namenode -bootstrapStandby 
如下截图:
 
 
5、完成后可以把所有服务停止:./stop-all.sh
然后,再次启动所有服务:./start-dfs.sh
 
 
可以成功看到各节点已经启动起来了,详情查看截图: