HDFS集群NameNode高可用改造

news/2024/5/20 1:13:04 标签: hdfs, hadoop, 大数据

文章目录

    • 背景
    • 高可用改造
      • 方案实施
        • 环境准备
        • 配置文件修改
        • 应用配置
        • 集群状态验证
        • 高可用验证

背景

假定目前有3台zookeeper服务器,分别为zk-01/02/03,DataNode服务器若干;

目前HDFS集群的Namenode没有高可用配置,Namenode和Secondary Namenode同时位于zk-03上,

且Secondary Namenode的作用是辅助Namenode恢复,并不是Namenode的高可用备份。

高可用改造

集群规划

zk-01zk-02zk-03
Active NameNodeStandby NameNode
JournalNodeJournalNodeJournalNode
ZK Failover ControllerZK Failover Controller

Hadoop版本为3.0之前,仅支持启用单个Standby Namenode。Hadoop版本3.0后支持启用多个Standby Namenode。

方案实施

环境准备
  1. 关闭防火墙
  2. zk-01/02/03之间配置ssh免密登录
  3. 配置jdk环境变量
配置文件修改
  1. hadoop-2.7.3/etc/hadoop/core-site.xml

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <!-- delete next line -->
            <value>hdfs://zk-03:9000</value> <!-- delete -->
            <!-- delete done -->
            <!-- add next line -->
            <value>hdfs://hacluster</value>
            <!-- add done -->
        </property>
        <property>
            <name>io.file.buffer.size</name>
            <value>131072</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/data/0/hadoop/hadoop/tmp</value>
        </property>
        <!-- add next 5 lines -->
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>zk-01:2181,zk-02:2181,zk-03:2181</value>
            <description>指定zookeeper地址</description>
        </property>
        <!-- add done -->
    </configuration>
    
  2. hadoop-2.7.3/etc/hadoop/hdfs-site.xml

    <configuration>
        <!-- add next multi-lines -->
        <property>
            <name>dfs.nameservices</name>
            <value>hacluster</value>
            <description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致</description>
        </property>
        <property>
            <name>dfs.ha.namenodes.hacluster</name>
            <value>namenode1,namenode2</value>
            <description>hacluster下面有两个NameNode</description>
        </property>
    
        <property>
            <name>dfs.namenode.rpc-address.hacluster.namenode1</name>
            <value>zk-01:9000</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.hacluster.namenode1</name>
            <value>zk-01:50070</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.hacluster.namenode2</name>
            <value>zk-02:9000</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.hacluster.namenode2</name>
            <value>zk-02:50070</value>
        </property>
    
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
                <description>配置隔离机制,同一时刻只有一个Namenode对外响应</description>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
                <description>使用隔离机制时需要ssh免登陆</description>
        </property>
    
        <property>
              <name>dfs.ha.automatic-failover.enabled</name>
              <value>true</value>
              <description>开启NameNode故障时自动切换</description>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.hacluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                <description>配置失败自动切换实现方式</description>
        </property>
    
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://zk-01:8485;zk-02:8485;zk-03:8485/hacluster</value>
            <description>指定NameNode的元数据在JournalNode上的存放位置</description>
        </property>
        <property>
              <name>dfs.journalnode.edits.dir</name>
              <value>/data/0/hadoop/hadoop/journal</value>
              <description>指定JournalNode在本地磁盘存放数据的位置</description>
        </property>
        <!-- add done -->
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/data/0/hadoop/hadoop/name</value>
        </property>
        <property>
            <name>dfs.blocksize</name>
            <value>268435456</value>
        </property>
        <property>
            <name>dfs.namenode.handler.count</name>
            <value>100</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name> 			      												<value>/data/0/hadoop/hadoop/data,/data/1/hadoop/hadoop/data,/data/2/hadoop/hadoop/data,/data/3/hadoop/hadoop/data,/data/4/hadoop/hadoop/data,/data/5/hadoop/hadoop/data,/data/6/hadoop/hadoop/data,/data/7/hadoop/hadoop/data,/data/8/hadoop/hadoop/data,/data/9/hadoop/hadoop/data,/data/10/hadoop/hadoop/data,/data/11/hadoop/hadoop/data</value>
        </property>
    </configuration>
    
应用配置
  1. 登录zk-03
$ scp -r /home/hadoop/hadoop-2.7.3 zk-02:/home/hadoop/
$ scp -r /home/hadoop/hadoop-2.7.3 zk-01:/home/hadoop/
# 停止现有HDFS集群的服务
$ hdfs/sbin/stop-dfs.sh
  1. zk-01/02/03: 全部启动JournalNode
$ hdfs/sbin/hadoop-daemon.sh start journalnode
  1. zk-01: 初始化并启动namenode1、zkfc
# 初始化并启动namenode1
$ hdfs/bin/hdfs namenode -format
$ hdfs/bin/hdfs namenode -initializeSharedEdits
$ hdfs/sbin/hadoop-daemon.sh start namenode
# 在ZK中初始化ha集群的信息
$ hdfs/bin/hdfs zkfc -formatZK
  1. zk-02:启动namenode2、zkfc
# 同步zk01上namenode的元数据信息并启动namenode2
$ hdfs/bin/hdfs namenode -bootstrapStandby
$ hdfs/sbin/hadoop-daemon.sh start namenode
# 在ZK02中同步ha集群的信息
$ hdfs/bin/hdfs zkfc -formatZK
  1. zk-01: 启动集群中其他服务,包括datanode
$ hdfs/sbin/start-dfs.sh
集群状态验证
  1. 登录zk-01/02,分别执行jps, 结果中应存在:
    • PID1 JournalNode
    • PID2 NameNode
    • PID3 DFSZKFailoverController
  • 若不存在JournalNode进程则执行:
    sbin/hadoop-daemon.sh start journalnode
  • 若不存在DFSZKFailoverController进程则执行:
    sbin/hadoop-daemon.sh start zkfc
  • 若不存在NameNode进程则执行:
    sbin/hadoop-daemon.sh start namenode
  1. 登录zk-03,执行jps,结果中应存在:
    • PID JournalNode
  • 若不存在JournalNode进程则执行:

    sbin/hadoop-daemon.sh start journalnode

  1. 在任意DataNode服务器上,执行jps,结果中应存在:
    • PID1 DataNode
  • 若不存在DataNode进程则执行:

    sbin/hadoop-daemon.sh start datanode

高可用验证
  1. 登录zk-01,查看namenode1的状态:

    bin/hdfs haadmin -getServiceState namenode1,输出结果应为active;

    若上述结果为standby,可以执行如下命令将主namenode切换为namenode1:

    bin/hdfs haadmin -transitionToActive --forcemanual namenode1

    再次执行命令查看namenode1和namenode2的状态:

    bin/hdfs haadmin -getServiceState namenode1,输出应为active;

    bin/hdfs haadmin -getServiceState namenode2,输出应为standby。

  2. 登录zk-01,停止namenode1:bin/hdfs --daemon stop namenode
    zkfc进程应自动随之停止,执行jps,结果中不存在NameNode和DFSZKFailoverController。
    查看namenode2的状态:
    bin/hdfs haadmin -getServiceState namenode2,结果应为active。

  3. 重新启动namenode1:
    bin/hdfs --daemon start namenode
    查看namenode1的状态:

    bin/hdfs haadmin -getServiceState namenode1,结果应为standby。

    此时可以使用第1步中切换主节点的命令将主节点切换到namenode1。


http://www.niftyadmin.cn/n/5120856.html

相关文章

app开发者提升第四季度广告收入的方法

第四季度将迎来双十一、双十二、圣诞、元旦为主的电商购物季&#xff0c;这是一年中利用线上消费为全新年度和全新预算做好准备的最佳时机&#xff0c;从过往的变现成功案例中汇总了优化要点&#xff0c;帮助开发者在第四季度和未来一年获取更多广告收益。 https://www.shensh…

视频上的水印文字如何去掉?

嘿&#xff0c;大家好&#xff01;作为一个自媒体从业者&#xff0c;我相信大家都想知道如何去掉视频上的水印文字&#xff0c;想必大家和我一样每天都会在互联网寻找素材&#xff0c;而大部分图片或者视频都带有各种各样的水印&#xff0c;这给我的创作带来了不小的麻烦&#…

FOC系列(一)----DRV8301芯片的学习

一、 写在前面 从今年四五月份一直就想玩个无刷直流电机&#xff08;BLDC&#xff09;&#xff0c;但是碍于一直没时间。其实很早就做出来了测试板的控制板&#xff0c;可以当做开发板使用&#xff0c;考虑到成本问题&#xff0c;最后选用STM32F103CBT6芯片&#xff0c;下面是很…

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder&#xff0c;Kotlin&#xff08;2&#xff09; import android.graphics.Canvas import android.graphics.Point import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.util…

Adobe Creative Cloud没有管理应用程序的权限怎么办?

许多Mac用户在Adobe Creative Cloud自动升级之后显示没有管理应用程序的权限&#xff0c;导致很多Adobe软件无法安装&#xff0c;接下来为大家带来解决方法。 1、前往-前往文件夹-输入以下路径 /Library/Application Support/Adobe/OOBE/Configs/ServiceConfig.xml 2、复制Ser…

降本增效神器?Share Creators 智能数字资产管理系统真香!

降本增效似乎是一个持续又永久的话题。尤其在今年&#xff0c; 显得格外的重要~ 在各行各业都受到了疫情所带来巨大冲击的背景下&#xff0c;降本增效对很多企业来说不再是锦上添花&#xff0c;而可能是一条唯一的出路。 随着市场的收缩和竞争的加剧&#xff0c;在更“卷”的…

Pytorch使用torchvision.datasets.ImageFolder读取数据集,数据集的内容排列状况

当使用torchvision.datasets.ImageFolder读取猫狗数据集时,dataset中存的图片是 猫狗猫狗猫狗猫狗 还是 猫猫猫猫狗狗狗狗 呢? 数据集文件的存放路径如下图 测试代码如下 import torch import torchvisiontransform torchvision.transforms.Compose([torchvision.transform…

动态数据可视化有哪些工具?

动态数据可视化工具 动态数据可视化是指能够实时或动态地展示数据变化的可视化方式。以下是一些常用的动态数据可视化工具&#xff0c;每个工具都有其特点和适用场景。 1. D3.js&#xff08;Data-Driven Documents&#xff09; D3.js 是一个基于 JavaScript 的强大数据可视化…