需要的安装包:

 注意:所有安装包均为    .tar.gz  格式

    1、jdk压缩包 : jdk-8u162-linux-x64.tar.gz

    2、zookeeper压缩包:zookeeper-3.4.6.tar.gz

    3、hadoop压缩包:hadoop-2.7.3.tar.gz

    4、Vmware安装包和CentOs镜像文件:

               vm12 

               镜像: CentOS-6.8-x86_64-bin-DVD1.iso

开始搭建集群:

        一.虚拟机准备

            1、安装vm12,这里安装不进行介绍,自行百度安装

注意:安装之后可能无法正常使用,需要在dos界面打开虚拟化。

            2、创建3个虚拟机,分别命名为master,slave1,slave2

                          

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop

                          

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_02

                之后就是设置主机名和用户名,用户名是普通用户名称,设置虚拟机登录密码 

                都设置后会自动进行安装,直到都安装完成,登录虚拟机就可以

                注意:3台虚拟机都按照相同步骤进行操作,因为安装时间过长,建议3台机器一起安装


二、配置sudo


               说明:配置sudo是为了可以很方便的使用root权限。

               好处:配置sudo后可以不切换到root用户便可以使用root权限,防止频繁切换用户之后,导致某一些文件的用户权限不同

               开始配置

                      1、切换用户到root  : su root

                             

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_03

                      2、编辑文件:vim /etc/sudoers

                            在root下面增加一行,当前我要给普通用户(lj)赋予sudo权限

                             

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_04

                          修改后,保存退出

                     3、切换回普通用户(命令: exit ),尝试sudo是否成功


三、配置静态ip


         说明:虚拟机需要配置景泰网络,防止每次使用时网络变化,集群中的节点都要互相访问,所以要保持节点网络不改变。

注意:当前使用的为NAT模式

 开始配置静态ip:

                    1、首先需要配置windows下虚拟机使用的网卡,在设置找到网络设置,点击更改适配器选项

                              

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_05

                        找到VMnet8这个选项卡,当前虚拟机net模式使用的是VMnet8这个网卡

                               

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_06

 

                     右键查看属性,找到IPv4,点击IPv,之后点击属性

                                 

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_07

                     点击  使用下面IP地址 ,配置ip,子网掩码,默认网关和首选DNS服务器(DNS可以随意配置,具体原理我也不清楚)

                                  

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_08

                       2、配置虚拟机网络。进入到vm12,在编辑中找到虚拟网络编辑器

                                 

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_09

                         (1)首先点击更改设置,需要管理员权限才能配置网络。

                         (2)点击VMnet8,可以看到这里是NAT模式,我们虚拟机NAT模式使用的是此网卡,之后便可以对此网卡进行修改

                         (3)修改子网ip,此ip与windows下的子网ip前三段一致,子网掩码与windows下子网掩码一致。

                         (4)之后点击NAT设置,对网络进行修改

                                

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_10

网关ip与windows下网关一致

                                

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_11

                        3、修改虚拟机内网络设置

                              (1)Linux下查看IP: ifconfig

                                        这里有2项,下面一项是lo(本地环回)可以不管,上面一项才是需要配置的。注意这里我的虚拟网卡是eth0,待会儿修改的也是eth0

                                       

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_12

                             (2)修改网络配置文件:首先找到对应目录 : cd /etc/sysconfig/network-scripts/

                                      可以找到ifcfg-eth0的文件,这个就是需要修改的文件

                                    

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_13

                            (3)修改文件: 将划线部分改为static(静态),之后在后面新增方框里面的内容

                                      这里ip前3段应该与网关一致,最后一段可自行设置

                                      子网掩码,网关与VMnet8设置的保持一致

                                      DNS1余网关ip一致。

                                   

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_14

                           (4)重启虚拟机网络服务:sudo /etc/init.d/networking restart    (吐槽:重启后查询没起作用,所以需要重启,但是配置hostname也需要重启,所以不急

                           (5)修改另外两台虚拟机网络

                       4、修改hostname

                             在这里修改主机名是因为重启之后主机名才生效,所以在这里配置主机名

                             编辑文件:   sudo vim /etc/sysconfig/network

三台虚拟机都需要修改

                            

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_15

                       5、重启虚拟机,重启后检查

                                   1、网络是否变成了配置的网络

                                   2、检查hostname是否修改,命令:hostname

                                  

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_16


四、配置ssh免密登录


             说明:集群各节点之间交互会使用到ssh,所以需要各节点之间免密登录

注意:此配置必须进行配置

             这里我已经配置过了,所以具体操作可以查看这篇文章:https://www.jb51.net/article/168598.htm

             文章中配置master的ssh后要试验登录master,此时要是ssh别的节点会发现仍然需要密码。这是因为master有slave1和slave2的公钥,而slave1和slave2没有master的公钥

             所以不能免密登录slave1和slave2。文章中的配置都完成之后再进行测试,不要急(ps:我之前着急测试,发现ssh别的节点需要密码,重新配置了一遍。。。。)


五、安装jdk和搭建zookeeper集群


            说明:zookeeper为了使集群主备namenode之间可以自动切换,防止集群NameNode故障引起集群故障

            1、jdk安装:(简单说明,如有疑问请自行搜索)

                  (1)解压: tar -zxvf  jdk-8u162-linux-x64.tar.gz

                           解压后修改文件夹名称为 jdk

                  (2)配置环境变量:sudo vim /etc/profile (此处配置的是系统变量)

                           在最后一行增加:

                               

export JAVA_HOME=/home/lj/cdh/jdk
                                      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar                                     export PATH=$JAVA_HOME/bin:$PATH

                 (3)刷新配置:source /etc/profile

                   (4)检验:

                                         java -version 

                                         javac

           2、zookeeper安装:

                1、解压:  tar -zxvf zookeeper-3.4.6.tar.gz   

                     解压后修改文件夹名称为 zookeeper

                2、创建文件夹:

                             (1)在zookeeper下创建tmp文件夹(与bin文件夹同级)

                                   

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_17

                             (2)在tmp文件夹中创建log文件夹

                             (3)在tmp文件夹下创建myid文件(必须名称为myid)

                                     

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_18

               3、修改conf下文件

                     cd zookeeper/conf 

                     复制zoo_sample.cfg为zoo.cfg 。命令:  cp  zoo_sample.cfg zoo.cfg

                     

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_19

                     修改zoo.cfg文件:   vim zoo.cfg 

                           其中:dataDir为数据存储位置

                                      dataLogDir为zookeeper位置文件路径

                          在最后新增3行,2888是节点之间通讯端口,3888是节点之间选举端口。新增内容如下

                                      server.1=master:2888:3888
                                      server.2=slave1:2888:3888
                                      server.3=slave2:2888:3888

                    

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_20

             4、将zookeeper文件夹发送至其余节点上:

                    scp  ./zookeeper lj@slave1:/home/lj/cdh/

                    scp  ./zookeeper lj@slave2:/home/lj/cdh/

             5、修改各节点zookeeper文件夹里的myid文件

                  vim myid

                  在master的myid中输入1,之后保存

                  在slave1的myid中输入2,之后保存

                  在slave2的myid中输入3,之后保存

                 这里的myid为zookeeper节点的编号,在启动时会用来进行节点选举。

               注意:因为我所有的节点的目录结构完全一致,所以zoo.cfg文件中的dataDir和dataLogDir都一样不用更改。若目录结构不一致则需要更改

            6、启动zookeeper

                  启动脚本在bin文件夹下,每个节点都要启动

                 启动命令为:   zookeeper/bin/zkServer.sh start 

                  启动之后使用jps查看进程

                      

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_21

     7、登录zookeeper集群

            登录测试集群是否正常,登录脚本在bin目录下

            

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_22

           这时候zookeeper集群正常,使用quit退出登录

           

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_23


六、安装Hadoop搭建集群


          此时准备工作都已经结束,都正常之后便可建立集群

          1、解压:     tar -zxvf hadoop-2.7.3.tar.gz  

                            修改文件名为  hadoop

          2、配置环境变量: sudo vim /etc/profile 

                       新增以下内容:

                                export HADOOP_HOME=/home/lj/cdh/hadoop
                                export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native    

                      这条之前jdk配置时已经增加,所以这里进行修改

                                export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

                    修改完成之后刷新配置文件: source /etc/profile

                    检查hadoop版本: hadoop version 

                              

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_重启_24

         3、修改配置文件:

                首先进入到hadoop/etc/hadoop 文件夹下 :  cd hadoop/etc/hadoop

                需要修改以下文件: 

core-site.xml

hdfs-site.xml

yarn-site.xml

mapred-site.xml

hadoop-env.sh

yarn-env.sh

slaves

 

                

                     (1) 修改core-site.xml,内容如下

<!--指定hdfs连接地址,集群模式(高可用)-->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://cluster</value>
	</property>
	
	<!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
	<property>
  		<name>ha.zookeeper.quorum</name>
  		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>

                  (2)修改hdfs-site.xml

<!--指定HDFS副本的数量,不能超过机器节点数-->
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<!-- 为namenode集群定义一个services name -->
	<property>
 		<name>dfs.nameservices</name>
  		<value>cluster</value>
	</property>
	<!-- nameservice 包含哪些namenode,为各个namenode起名 -->
	<property>
  		<name>dfs.ha.namenodes.cluster</name>
  		<value>nn01,nn02</value>
	</property>
 	<!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
	<property>
  		<name>dfs.namenode.rpc-address.cluster.nn01</name>
  		<value>master:9000</value>
	</property>
 	<!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
	<property>
  		<name>dfs.namenode.http-address.cluster.nn01</name>
  		<value>master:50070</value>
	</property>
 	<!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
	<property>
  		<name>dfs.namenode.rpc-address.cluster.nn02</name>
  		<value>slave1:9000</value>
	</property>
 	<!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
	<property>
  		<name>dfs.namenode.http-address.cluster.nn02</name>
  		<value>slave1:50070</value>
	</property>
  	<!-- namenode间用于共享编辑日志的journal节点列表 -->
	<property>
  		<name>dfs.namenode.shared.edits.dir</name>
  		<value>qjournal://master:8485;slave1:8485;slave2:8485/cluster</value>
	</property>
    <!-- journalnode 上用于存放edits日志的目录 -->
	<property>
  		<name>dfs.journalnode.edits.dir</name>
  		<value>/home/lj/cdh/hadoop-2.7.3/tmp/journal</value>
	</property>
  	<!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
	<property>
  		<name>dfs.ha.automatic-failover.enabled.cluster</name>
  		<value>true</value>
	</property>
	<!-- 配置失败自动切换实现方式 -->
	<property>
    	<name>dfs.client.failover.proxy.provider.cluster</name>
 		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
  	<!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
	<property>
  		<name>dfs.ha.fencing.methods</name>
  		<value>sshfence(lj:9431)</value>
	</property>
  	<!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
	<property>
  		<name>dfs.ha.fencing.ssh.private-key-files</name>
  		<value>/home/lj/.ssh/id_rsa</value>
	</property>
	<!-- connect-timeout超时时间 -->
	<property>
    		<name>dfs.ha.fencing.ssh.connect-timeout</name>
    		<value>30000</value>
	</property>
	<property>
   		<name>dfs.name.dir</name>
   		<value>/home/lj/cdh/hadoop-2.7.3/dfs/name</value>
   	</property>
   	<property>
   		<name>dfs.data.dir</name>
   		<value>/home/lj/cdh/hadoop-2.7.3/dfs/data</value>
   	</property>

            (3)修改yarn-site.xml

<!-- 启用Resource Manager HA高可用性 -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!-- 指定resourcemanager的名字 -->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</value>
	</property>
	<!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<!-- 指定rm1的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>master</value>
	</property>
	<!-- 指定rm2的地址  -->
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>slave1</value>
	</property>
	<!-- 指定zookeeper集群机器 -->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>master:2181,slave1:2181,slave2:2181</value>
	</property>
	<!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>

            (4)修改mapred-site.xml,注意 该文件不存在,需要手动创建,

                           cp mapred-site.xml.template mapred-site.xml

                     修改内容如下:

<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
		<description>指定mapreduce使用yarn框架</description>
	</property>

           (5) 修改slaves文件,这里指定的是datanode节点,内容如下:

master
slave1
slave2

            (6)修改hadoop-env.sh文件,指定jdk的地址

                  

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_25

          (7)修改yarn-env.sh文件,指定jdk的地址 

                 

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_26

     4、将文件发送到其余节点

                    scp  ./hadoop lj@slave1:/home/lj/cdh/

                    scp  ./hadoop lj@slave2:/home/lj/cdh/

     5、配置其余节点环境变量,与步骤2一致。

     6、启动hadoop

         注意:第一次启动需要以下内容顺序执行

       (1)启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

cd /usr/local/hadoop/sbin
sh hadoop-daemon.sh start journalnode

       (2) 在master上执行格式化操作,格式化namenode和zkfc (在倒数几行可以看到formatted 即为成功)

hdfs namenode -format
hdfs zkfc -formatZK

    (3)在master上启动namenode  (在倒数几行可以看到formatted 即为成功)

hadoop-daemon.sh start namenode

    (4)namenode主从信息同步,在slave1节点上执行同步命令  (无报错)

hdfs namenode -bootstrapStandby

上述步骤完成后,接下来我们就可以启动hadoop了

启动命令

      master节点

start-all.sh
#启动ZookeeperFailoverController
hadoop-daemon.sh start zkfc

      slave1节点

yarn-daemon.sh start resourcemanager
hadoop-daemon.sh start zkfc

停止命令

#master
/usr/local/hadoop/sbin/stop-all.sh
/usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc

#slave1
/usr/local/hadoop/sbin/yarn-daemon.sh stop resourcemanager
/usr/local/hadoop/sbin/hadoop-daemon.sh stop zkfc

      7、查看进程   jps

#master
26849 NodeManager
2770 QuorumPeerMain
27331 DFSZKFailoverController
26308 DataNode
26537 JournalNode
26154 NameNode
26733 ResourceManager


#slave1
7489 JournalNode
7281 NameNode
627 QuorumPeerMain
8233 DFSZKFailoverController
8123 ResourceManager
7389 DataNode
7631 NodeManager

#slave2
21762 QuorumPeerMain
29476 NodeManager
29271 DataNode
29370 JournalNode

      8、通过页面检验

          打开火狐浏览器,输入master:50070 和slave1:50070,可以看到一个为active,一个为standby

             

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_hadoop_27

              

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_28

       之后查看master:8088和slave1:8088,可以看到yarn页面

             

hadoop 高可用 集群配置 四个重要配置文件 hadoop高可用搭建步骤_zookeeper_29

            此时便成功了。

    9、测试高可用

        这里需要kill掉活跃的namenode,之后查看页面是否转换成功。

        我这里转换没有成功,可以参照此文章: