目录

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

(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脚本命令,查看节点启动情况。

   (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格式化成功。

  图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.查看集群

若要配置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。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐