当前位置: 首页 > news >正文

HDFS集群NameNode高可用改造

文章目录

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

背景

假定目前有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。

相关文章:

HDFS集群NameNode高可用改造

文章目录 背景高可用改造方案实施环境准备配置文件修改应用配置集群状态验证高可用验证 背景 假定目前有3台zookeeper服务器&#xff0c;分别为zk-01/02/03&#xff0c;DataNode服务器若干&#xff1b; 目前HDFS集群的Namenode没有高可用配置&#xff0c;Namenode和Secondary…...

Spark集群中一个Worker启动失败的排错记录

文章目录 1 检查失败节点worker启动日志2 检查正常节点worker启动日志3 查看正常节点spark环境配置4 又出现新的ERROR4.1 报错解释4.2 报错解决思路4.3 端口报错解决操作 集群下电停机后再次启动时&#xff0c;发现其中一台节点的worker启动失败。 1 检查失败节点worker启动日…...

Mysql的JDBC知识点

什么是JDBC JDBC(Java DataBase Connectivity) 称为Java数据库连接&#xff0c;它是一种用于数据库访问的应用程序API&#xff0c;由一组用Java语言编写的类和接口组成&#xff0c;有了JDBC就可以用统一的语法对多种关系数据库进行访问&#xff0c;而不用担心其数据库操作语…...

git的实际操作

文章目录 删除GitHub上的某个文件夹克隆仓库到另一个仓库 删除GitHub上的某个文件夹 克隆仓库到另一个仓库 从原地址克隆一份裸板仓库 –bare创建的克隆版本库都不包含工作区&#xff0c;直接就是版本库的内容&#xff0c;这样的版本库称为裸版本库 git clone --bare ****(原…...

数据结构零基础C语言版 严蔚敏-线性表、顺序表

二、顺序表和链表 1. 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构&#xff0c;…...

Keil uVision 5 MDK版软件安装包下载及安装教程(最详细图文教程)

目录 一.简介 二.安装步骤 软件&#xff1a;Keil uvision5版本&#xff1a;MDKv518语言&#xff1a;中文/英文大小&#xff1a;377.01M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.59GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接…...

单目3D目标检测[基于深度辅助篇]

基于深度辅助的方法 1. Pseudo-LiDAR Pseudo-LiDAR from Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving康奈尔大学https://zhuanlan.zhihu.com/p/52803631 首先利用DRON或PSMNET从单目 (Monocular)或双目 (Stereo)图像获取对应的…...

Ubuntu20.04下安装MySQL8环境

Ubuntu20.04下安装MySQL8环境 1.下载MySQL客户端和服务器2.配置MySQL3.测试MySQL4.设置MySQL服务开机自启动5.修改root密码MySQL数据库基本使用启动MySQL数据库服务重启MySQL数据库服务停止MySQL数据库服务查看MySQL运行状态设置MySQL服务开机自启动停止MySQL服务开机自启动MyS…...

html鼠标悬停图片放大

要在HTML中实现鼠标悬停时图片放大的效果&#xff0c;你可以使用CSS和JavaScript来完成。下面是一个简单的示例&#xff1a; 首先&#xff0c;创建一个HTML文档&#xff0c;包含一张图片和相应的CSS和JavaScript代码。 <!DOCTYPE html> <html lang"en">…...

基于hugging face的autogptq量化实践

1.量化并保存到本地的 #导入库&#xff1a; from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig model_id "facebook/opt-125m"quantization_config GPTQConfig(bits4,group_size128,dataset"c4",desc_actFalse, )tokenizer A…...

MySQL2:MySQL中一条查询SQL是如何执行的?

MySQL2&#xff1a;MySQL中一条查询SQL是如何执行的&#xff1f; MySQL中一条查询SQL是如何执行的&#xff1f;1.连接怎么查看MySQL当前有多少个连接&#xff1f;思考&#xff1a;为什么连接数是查看线程&#xff1f;客户端的连接和服务端的线程有什么关系&#xff1f;MySQL参数…...

C++入门01—从hello word!开始

1.第一个C程序 1.1 创建项目 第一次使用Visual Studio时&#xff1a; 1.2 创建文件 1.3 编写代码 编写第一个代码&#xff1a; #include<iostream> using namespace std; int main() {cout << "hello word!" << endl;system("pause"…...

Mingw下载---运行vscodeC++文件

下载 下载网址&#xff1a; https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 翻到最下面&#xff0c;选择win64的安装&#xff1a; 下载完&#xff0c;解压到没有空格和中文字符的路径。不然在vscode中运行不了C代码。...

数据安全与PostgreSQL:最佳保护策略

在当今数字化时代&#xff0c;数据安全成为了企业不可或缺的一环。特别是对于使用数据库管理系统&#xff08;DBMS&#xff09;的组织来说&#xff0c;确保数据的完整性、保密性和可用性至关重要。在众多DBMS中&#xff0c;PostgreSQL作为一个强大而灵活的开源数据库系统&#…...

火山引擎实时、低延时拥塞控制算法的优化实践

摘要 火山引擎智能拥塞控制算法 VICC&#xff08;Volcano Intelligent Congestion Control&#xff09;是一种自适应的拥塞控制算法&#xff0c;旨在解决全球不同网络环境下&#xff0c;不同音视频应用对带宽利用率和延时的差异化要求。它结合了传统拥塞控制算法&#xff08;如…...

adb设备调试常用命令

自从工作越来越忙后&#xff0c;越来越懒得写文章了&#xff0c;趁着1024程序员节&#xff0c;仪式性地写篇文章&#xff0c;分享一下最近调试设备经常用到的adb指令~ 1.查看应用内存占用 1.1 dumpsys meminfo package dumpsys是查看系统服务信息的一个常用指令&#xff0c;可…...

ubuntu下Docker的简单使用并利用主机显示

首先分享一个docker镜像的网站&#xff1a;https://hub.docker.com/search?q 这个网站里面有很多配置好的镜像&#xff0c;可以直接拉取。 下面介绍一下docker的安装和使用。 1、docker得到安装&#xff1a; sudo apt-get install docker 2、docker拉取一个镜像到本地,这里我…...

第12章 PyTorch图像分割代码框架-1

从本章开始&#xff0c;本书将会进行深度学习图像分割的实战阶段。PyTorch作为目前最为流行的一款深度学习计算框架&#xff0c;在计算机视觉和图像分割任务中已经广泛使用。本章将介绍基于PyTorch的深度学习图像分割代码框架&#xff0c;在总体框架的基础上&#xff0c;基于PA…...

2023CSPJ 旅游巴士 —— dijkstra

This way 题意&#xff1a; 给你一个有向图&#xff0c;1号点为起点&#xff0c;n为终点。你可以在k的倍数的时间点在起点开始&#xff0c;每条边的边长为1&#xff0c;同时&#xff0c;每条边有一个限定时间ai&#xff0c;表示你必须在大于等于ai的时间点才能走这条边。 …...

数据结构之栈的讲解(源代码+图解+习题)

我们在学习过顺序表和链表之后&#xff0c;了解了使用数组存储数据&#xff0c;使用结构体来存储数据和有关的指针&#xff0c;这些都是底层的东西&#xff0c;链表是靠指针的链接&#xff0c;顺序表是靠数组的下标才能得以实现增删查改。众多数据结构其实底层都离不开数组&…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...