一、NameNode HA (HDFS高可用)搭建

搭建环境

第一步

        配置免密登录,以Hadoop11、Hadoop12、Hadoop13为例,使用这些域名前需要进行映射(对应ip),进行密钥创建

ssh-keygen -t rsa

 并发送公钥至所有NameNode节点如:

ssh-copy-id hadoop11
ssh-copy-id hadoop12
ssh-copy-id hadoop13

包括自身。

第二步

        安装psmisc(主要使用其中的fuser命令,用于检查和操作进程)

        xcall(远程连接操作,三台服务器同时执行的脚本)

  xcall yum install -y psmisc

        镜像源修复(以aliyun为例)        

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

第三步

        检查jdk以及zk(zookeeper)是否安装完毕

第四步

        检查是否安装了Hadoop集群,如果安装过,先清空数据,清空数据前先停止集群

stop-all.sh
xcall rm -rf /opt/installs/hadoop3.1.4/data /opt/installs/hadoop3.1.4/logs/

第五步

配置Hadoop-env.sh文件(最后部分)

       

export JAVA_HOME=/opt/installs/jdk1.8

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_JOURNALNODE_USER=root

export HDFS_ZKFC_USER=root

修改完毕同步其他服务器

myscp hadoop-env.sh

第六步

配置core-site.xml文件

<configuration>
  
  <!--hdfs集群的文件位置-->
  <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/installs/hadoop3.1.4/data</value>
    </property>
  <!--hdfs入口,设置虚拟地址,具体地址后面配置-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hdfs-cluster</value>
  </property>
  <!--hdfs要访问zookeeper集群-->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop11:2181,hadoop12:2181,hadoop13:2181</value>
  </property>
</configuration>

第七步

<configuration>
    <!-- 副本数 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 定义hdfs入口的命名服务 -->
    <property>
        <name>dfs.nameservices</name>
        <value>hdfs-cluster</value>
    </property>
    <!-- 定义hdfs入口的命名服务下虚拟ip-->
    <property>
        <name>dfs.ha.namenodes.hdfs-cluster</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 虚拟ip地址1 RPC入口 -->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
        <value>hadoop11:8020</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>hadoop11:9870</value>
    </property>
    <!-- 虚拟ip地址2 PRC入口 -->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>hadoop12:8020</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>hadoop12:9870</value>
    </property>
    
    <!-- 定义QJN在linux中保存文件磁盘目录 -->
    <property>
        <!-- Journal Edit Files 的存储目录:() -->
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/installs/journalnode/data/</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop11:8485;hadoop12:8485;hadoop13:8485/hdfs-cluster</value>
    </property>
    
    
    <!-- 是否开启故障切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    
    <!-- 基于zookeeper的故障切换的代码类 -->
    <property>
        <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    
    <!-- 远程杀死namenode方式(防止namenode假死,导致双主出现) -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!-- 指定私钥的文件目录,使用免密登录杀死NN进程 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>

    <!-- 可以在hdfs上点击结果查看-->
    <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
    </property>

  <!--    关闭 启动时权限检查  -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
        <description>如果为"true",则在HDFS中启用权限检查;如果为"false",则关闭权限检查;默认值为"true"。</description>
     </property>
</configuration>

第八步

检查workers文件是否为对于数量(3台)

第九步

同步core-site.xml和hdfs-site.xml配置文件到其余两台上

myscp core-site.xml
myscp hdfs-site.xml

第十步

逐步启动(第一次启动需注意)

        1.启动zookeeper
zk.sh start
        2.初始化ZKFC在zk中的信息(第一次需要做)Hadoop11上进行即可
hdfs zkfc -formatZK
        3.在三台服务器上启动jn(存储namenode元数据)
xcall hdfs --daemon start journalnode

        启动原因:下一步格式化需要用到,否则会报错(8485连接超时,格式化失败)

        4.对集群进行namenode的格式化
hdfs namenode -format
        5.启动hdfs

        默认启动jn,但之前单独启动了会有三个警告,忽略即可

start-dfs.sh
        6.启动第二个namenode

        需要在Hadoop12上运行,第一次要输入如下命令,之后不需要

hdfs namenode -bootstrapStandby

        启动第二个namenode

hdfs --daemon start namenode

第十一步

通过网页查看namenode状态(端口号9820)第一个显示为active状态,查看第二个显示为standby状态

第十二步

测试是否可以高可用,手动关闭第一台的namenode,第二台会自动从standby状态变为active状态

二、resourcemanager高可用搭建

第一步

修改yarn-site.xml

<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>

  <!-- Site specific YARN configuration properties -->

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value> 
  </property>

  <property>
    <name>yarn.application.classpath</name>
    <value>/opt/installs/hadoop/etc/hadoop:/opt/installs/hadoop/share/hadoop/common/lib/*:/opt/installs/hadoop/share/hadoop/common/*:/opt/installs/hadoop/share/hadoop/hdfs:/opt/installs/hadoop/share/hadoop/hdfs/lib/*:/opt/installs/hadoop/share/hadoop/hdfs/*:/opt/installs/hadoop/share/hadoop/mapreduce/*:/opt/installs/hadoop/share/hadoop/yarn:/opt/installs/hadoop/share/hadoop/yarn/lib/*:/opt/installs/hadoop/share/hadoop/yarn/*</value> 
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 历史日志在HDFS保存的时间,单位是秒 -->
  <!-- 默认的是-1,表示永久保存 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>

  <property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop11:19888/jobhistory/logs</value>
  </property>

  <!--配置resourcemanager的HA-->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <!-- RM 集群标识 -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-cluster</value>
  </property> 
  <!-- RM 的逻辑 ID 列表 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property> 
  <!-- RM1 的主机地址 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop11</value>
  </property>
  <!-- RM1 的主机web管理界面地址 --> 
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop11:8088</value>
  </property>
  <!-- RM2 的主机地址 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop12</value>
  </property> 
  <!-- RM2 的主机web管理界面地址 -->  
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>hadoop12:8088</value>
  </property>
  <!-- ZooKeeper 集群的地址 -->  
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop11:2181,hadoop12:2181,hadoop13:2181</value>
  </property> 
  <!-- 启用自动恢复 --> 
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property> 
  <!-- 用于yarn故障转移持久化zk的类 -->
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property> 

<!-- 关闭虚拟内存检查 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
 </property>

</configuration>

第三步

同步mapred-site.xml和yarn-site.xml(myscp脚本,分发给其余服务器)

myscp yarn-site.xml

第四步

启动yarn,查看备用和主要工作进程

yarn rmadmin -getAllServiceState

结束

更多推荐