目录

1.集群规划

2.文件配置

3.启动集群

4.查看集群

 在开始Hadoop集群的HDFS高可用环境搭建之前,需要完成zookeeper搭建工作。

1.集群规划

节点

NameNode

DataNode

ResourceManager

NodeManager

JournalNode

ZKFC

QuorumPeerMain

master

slave1


slave2




集群规划完成后,既可以开始搭建HDFS HA集群环境。

2.文件配置

  Hadoop的相关配置文件主要包括core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers这5个文件,下面依次介绍每个文件的配置内容。

       (1) 配置core-site.xml。

        注意:如果打开的文件是一个空白文件,说明是新建了该文件,不保存退出,检查路径或文件名是否有错

[root@master ~]# cd /opt/module/hadoop-3.1.3/etc/hadoop/
[root@master hadoop]# vi core-site.xml

  

<configuration>
         <!-- 指定HDFS的nameservice为ns -->
         <property>
                 <name>fs.defaultFS</name>
                 <value>hdfs://ns</value>
         </property>
         <!-- 指定Hadoop运行时产生文件的存储目录 -->
         <property>
                 <name>hadoop.tmp.dir</name>
                 <value>/opt/module/hadoop-3.1.3/tmp</value>
         </property>  <!-- 指定zookeeper地址 -->
  <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
      </property>
         </configuration>    (2)  配置hdfs-site.xml。
[root@master hadoop]# vi hdfs-site.xml<configuration>   
<!-- 指定HDFS副本的数量 -->
         <property>
                    <name>dfs.replication</name>
                    <value>3</value>
         </property><!-- 指定HDFS的nameservice为ns,要与core-site.xml文件配置内容一致-->
      <property>
         <name>dfs.nameservices</name>
         <value>ns</value>
     </property>
     <!-- 集群中NameNode节点名称 -->
     <property>
         <name>dfs.ha.namenodes.ns</name>
         <value>nn1,nn2</value>
     </property>
 <!-- nn1的RPC通信地址 --><property>
       <name>dfs.namenode.rpc-address.ns.nn1</name>
       <value>master:9000</value>
     </property>
     <!-- nn2的RPC通信地址 -->
     <property>
       <name>dfs.namenode.rpc-address.ns.nn2</name>
       <value>slave1:9000</value>
     </property>
     <!-- nn1的http通信地址 -->
     <property>
         <name>dfs.namenode.http-address.ns.nn1</name>
         <value>master:50070</value>
     </property><!-- nn2的http通信地址 -->
     <property>
           <name>dfs.namenode.http-address.ns.nn2</name>
           <value>slave1:50070</value>
     </property>
     <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
     <property>
           <name>dfs.namenode.shared.edits.dir</name>
             <value>qjournal://master:8485;slave1:8485;slave2:8485/ns</value>
     </property>    <!-- 开启NameNode故障时自动切换 -->
<property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
     </property>    <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
     <property>
           <name>dfs.client.failover.proxy.provider.ns</name>
          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
     </property>
     <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
 <property>
           <name>dfs.ha.fencing.methods</name>
           <value>sshfence</value>
     </property>
     <!-- 使用隔离机制时需要ssh无秘钥登录-->
     <property>
           <name>dfs.ha.fencing.ssh.private-key-files</name>
           <value>/root/.ssh/id_rsa</value>
     </property>
     <!-- 声明journalnode服务器存储目录-->
     <property>
           <name>dfs.journalnode.edits.dir</name>
           <value>/opt/module/hadoop-3.1.3/ha/journal</value>
     </property>
 <!-- 关闭权限检查-->
         <property>
                <name>dfs.permissinos.enabled</name>
                <value>false</value>
         </property> </configuration>

 (3)配置yarn-site.xml。

[root@master hadoop]# vi yarn-site.xml
<configuration>
         <!-- Reducer获取数据的方式 -->
         <property>
                  <name>yarn.nodemanager.aux-services</name>
                  <value>mapreduce_shuffle</value>
         </property>
         <!-- 指定YARN的ResourceManager的地址 -->
         <property>
                   <name>yarn.resourcemanager.hostname</name>
                    <value>master</value>
         </property>     <property>
                   <name>yarn.log-aggregation-enable</name>
                    <value>true</value>
         </property>
     </configuration>

(4) 配置mapred-site.xml。

[root@master hadoop]# vi mapred-site.xml

        

<configuration>
                 <!-- 指定MR运行在Yarn上 -->
                 <property>
                         <name>mapreduce.framework.name</name>
                         <value>yarn</value>
                 </property>              <property>
                         <name>mapreduce.jobhistory.address</name>
                         <value>master:10020</value>
                 </property>
                 <property>
                         <name>mapreduce.jobhistory.webapp.address</name>
                         <value>master:19888</value>
                 </property>
         </configuration>[root@master hadoop]# vi workers
[root@master hadoop]# vi workers

(5)配置workers文件。打开该配置文件,然后配置以下内容:

   

master
   slave1
   slave2

        该文件中写入哪个主机名,哪个主机就会存在datanode节点。

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

(6)定义root用户操作hdfs namenode等将以下内容写入配置文件profile末尾,并让修改后的文件生效

[root@master ~]# vi /etc/profile
[root@master ~]# source /etc/profile
export HDFS_NAMENODE_USER=root
       export HDFS_DATANODE_USER=root
       export HDFS_SECONDARYNAMENODE_USER=root
       export YARN_RESOURCEMANAGER_USER=root
       export YARN_NODEMANAGER_USER=root     export HDFS_ZKFC_USER=root
      export HDFS_JOURNALNODE_USER=root

(7)使用scp命令将配置好的hadoop和/etc/profile文件分发到slave1和slave2节点。

[root@master hadoop]# cd ..
[root@master etc]# scp -r hadoop slave1:/opt/module/hadoop-3.1.3/etc/
[root@master etc]# scp -r hadoop slave2:/opt/module/hadoop-3.1.3/etc/
[root@master etc]# scp  /etc/profile slave1:/etc/
[root@master etc]# scp  /etc/profile slave2:/etc/
[root@master etc]# source  /etc/profile
[root@slave1 etc]# source  /etc/profile
[root@slave2 etc]# source  /etc/profile

3.启动集群

  (1) 启动ZooKeeper

    分别在master、slave1和slave2节点输入以下命令。

[root@master ~]# zkServer.sh start

  如果显示一个leader和两个follower,则表示zookeeper启动成功。

 (2)  启动JournalNode

    分别在master、slave1和slave2节点输入以下命令。

[root@master ~]# hadoop-daemons.sh start journalnode

  输入jps.sh脚本命令,查看节点启动情况。

hdfs 创建软链_xml

   (3)格式化HDFS

     删除mater、slave1和slave2安装目录下tmp、log和ha文件夹。

[root@master ~]# cd /opt/module/hadoop-3.1.3/
[root@master hadoop-3.1.3]# ls
append.txt  include      logs        share
bin         lib          NOTICE.txt  tmp
etc         libexec      README.txt  sbin
ha          LICENSE.txt
[root@master hadoop-3.1.3]# rm -rf tmp   
[root@master hadoop-3.1.3]# rm -rf logs
[root@master hadoop-3.1.3]# rm -rf ha
[root@slave1 ~]# cd /opt/module/hadoop-3.1.3/
[root@slave1 hadoop-3.1.3]# ls
append.txt  include      logs        share
bin         lib          NOTICE.txt  tmp
etc         libexec      README.txt  sbin
ha          LICENSE.txt
[root@slave1 hadoop-3.1.3]# rm -rf tmp   
[root@slave1 hadoop-3.1.3]# rm -rf logs
[root@slave1 hadoop-3.1.3]# rm -rf ha
[root@slave2 ~]# cd /opt/module/hadoop-3.1.3/
[root@slave2 hadoop-3.1.3]# ls
append.txt  include      logs        share
bin         lib          NOTICE.txt  tmp
etc         libexec      README.txt  sbin
ha          LICENSE.txt
[root@slave2 hadoop-3.1.3]# rm -rf tmp   
[root@slave2 hadoop-3.1.3]# rm -rf logs
[root@slave2 hadoop-3.1.3]# rm -rf ha

   

[root@master hadoop-3.1.3]# hdfs namenode -format

        输入对应命令后,若出现图4-1所示标志,说明NameNode格式化成功。

hdfs 创建软链_hadoop_02

  图3-1 格式化NameNode成功界面

为了slave1和master主机NameNode保持一致,需要将master主机上hadoop-3.1.3目录下的tmp文件夹分发给slave1

[root@master hadoop-3.1.3]# scp -r tmp slave1:/opt/module/hadoop-3.1.3/

(4) 格式化ZKFC

[root@master hadoop-3.1.3]# hdfs zkfc -formatZK

  (5) 整体启动hdfs和yarn。

[root@master hadoop-3.1.3]# start-dfs.sh
[root@master hadoop-3.1.3]# start-yarn.sh

         输入jps命令,查看主机节点启动情况。

[root@master hadoop-3.1.3]# jps.sh
**********master**********
14192 NameNode
14357 DataNode
14806 DFSZKFailoverController
13752 JournalNode
15144 NodeManager
13450 QuorumPeerMain
14989 ResourceManager
15503 Jps
**********slave1**********
7971 JournalNode
7829 QuorumPeerMain
8696 DFSZKFailoverController
8936 Jps
8793 NodeManager
8395 NameNode
8491 DataNode
**********slave2**********
13424 QuorumPeerMain
14259 NodeManager
14391 Jps
14072 DataNode
13657 JournalNode
[root@master hadoop-3.1.3]#

        若需关闭集群,在主机上输入相应关闭的命令。启动集群是先hdfs后yarn,关闭集群是先yarn后hdfs。

4.查看集群

hdfs 创建软链_hdfs_03

hdfs 创建软链_hadoop_04

若要配置yarn ha 环境,只需要在hdfs ha基础上,更改yarn-site.xml文件。

<configuration>
 <!-- Reducer获取数据的方式 -->
         <property>
                  <name>yarn.nodemanager.aux-services</name>
                  <value>mapreduce_shuffle</value>
         </property>
        <!-- 开启YARN HA -->
     <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
     </property>
      <!-- 指定YARN HA的名称 -->
      <property>
         <name>yarn.resourcemanager.cluster-id</name>
         <value>RM_CLUSTER</value>
      </property>
          <!-- 指定两个resourcemanager的名称 -->
      <property>
          <name>yarn.resourcemanager.ha.rm-ids</name>
          <value>rm1,rm2</value>
       </property>     <!-- 配置rm1,rm2的主机 -->
         <property>
         <name>yarn.resourcemanager.hostname.rm1</name>
         <value>master</value>
      </property>
          <property>
          <name>yarn.resourcemanager.hostname.rm2</name>
          <value>slave1</value>
        </property>       <!-- 配置YARN的http端口 -->
           <property>
           <name>yarn.resourcemanager.webapp.address.rm1</name>
           <value>master:8088</value>
           </property>
         <property>
       <name>yarn.resourcemanager.webapp.address.rm2</name>
           <value>slave1:8088</value>
        </property><!-- 配置zookeeper的地址 -->
 <property>     <name>yarn.resourcemanager.zk-address</name>
       <value>master:2181,slave1:2181,slave2:2181</value>
 </property> <!-- 开启yarn resourcemanager restart -->
 <property>
 <name>yarn.resourcemanager.recovery.enabled</name>
 <value>true</value>
 </property><!-- 配置resourcemanager的状态存储到zookeeper中 -->
    <property>
         <name>yarn.resourcemanager.store.class</name>
         <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
     </property>
         <property>
                   <name>yarn.log-aggregation-enable</name>
                    <value>true</value>
         </property>
 </configuration>再将更改后的yarn-site.xml文件分发给slave1和slave2。