Hadoop 集群如何升级?

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


正文

在这里插入图片描述

升级 Hadoop 集群需要细致的规划,特别是 HDFS 的升级。如果文件系统的布局的版本发生变化,升级操作会自动将文件系统数据和元数据迁移到兼容新版本的格式。与其他涉及数据迁移的过程相似,升级操作暗藏数据丟失的风险,因此需要确保数据和元数据都已经备份完毕。

规划过程最好包括在一个小型测试集群上的测试过程,以评估是否能够承担(可能的)数据丢失的损失。测试过程使用户更加熟悉升级过程、了解如何配置本集群和工具集,从而为在产品集群上进行升级工作消除技术障碍。此外,一个测试集群也有助于测试客户端的升级过程。

如果文件系统的布局并未改变,升级集群就非常容易:在集群上安装新版本的 Hadoop(客户端也同步安装),关闭旧的守护进程,升级配置文件, 启动新的守护进程,令客户端使用新的库。整个过程是可逆的,换言之, 也可以方便地还原到旧版本。

成功升级版本之后,还需要执行两个清理步骤。

  1. 从集群中移除旧的安装和配置文件。
  2. 在代码和配置文件中针对“被弃用”(deprecation) 警告信息进行修复。

升级功能是Hadoop 集群管理工具如 Cloudera Manager 和 Apache Ambari 的一个亮点。它们简化了升级过程,且使得滚动升级变得容易。节点以批量方式升级(或对于主节点,一次升级一个),这样客户端不会感受到服务中断。

如果采用前述方法来升级 HDFS,且新旧 HDFS 的文件系统布局恰巧不同,则 namenode 无法正常工作,在其日志文件中产生如下信息:

File system image contains an old layout version -16.
An upgrade to version -18 is required.
Please restart NameNode with -upgrade option.

最可靠的判定文件系统升级是否必要的方法是在一个测试集群做实验。

升级 HDFS 会保留前一版本的元数据和数据的副本,但这并不意味着需要两倍的存储开销,因为 datanode 使用硬链接保存指向同一块的两个应用(分别为当前版本和前一版本),从而能够在需要时方便地回滚到前一版本。需要强调的是,系统回滚到旧版本之后,原先的升级改动都将被取消。

用户可以保留前一个版本的文件系统,但无法回滚多个版本。为了执行HDFS 数据和元数据上的另一次升级任务,需要删除前一版本,该过程被称为“定妥升级”(finalizing the upgrade)。一旦执行该操作,就无法再回滚到前一个版本。

一般来说,升级过程可以忽略中间版本。但在某些情况下还是需要先升级到中间版本,这种情况会在发布说明文件中明确指出。

仅当文件系统健康时,才可升级,因此有必要在升级之前调用 fsck 工具全面检查文件系统的状态。此外,最好保留fsck 的输出报告,该报告列举了所有文件和块信息;在升级之后,再次运行 fsck 新建一份输出报告并比较两份报告的内容。

在升级之前最好清空临时文件,包括 HDFS 的 MapReduce 系统目录和本地的临时文件等。

综上所述,如果升级集群会导致文件系统的布局变化,则需要采用下述步骤进行升级

在这里插入图片描述

  1. 在执行升级任务之前,确保前一升级已经定妥。
  2. 关闭 YARN 和 MapReduce 守护进程。
  3. 关闭 HDFS,并备份 namenode 目录。
  4. 在集群和客户端安装新版本的 Hadoop。
  5. 使用 -upgrade 选项启动 HDFS
  6. 等待,直到升级完成。
  7. 检验 HDFS 是否运行正常。
  8. 启动 YARN 和 MapReduce 守护进程。
  9. 回滚或定妥升级任务(可选的)。

运行升级任务时,最好移除 PATH 环境变量下的Hadoop 脚本,这样的话,用户就不会混淆针对不同版本的脚本。通常可以为新的安装目录定义两个环境变量。在后续指令中,我们定义了 OLD_HADOOP_HOME 和NEW_HADOOP_HOME 两个环境变量。

启动升级,为了执行升级,可运行以下命令:

% $NEW_HADOOP_HOME/bin/start-dfs.sh -upgrade 

该命令的结果是让namenode 升级元数据,将前一版本放在dfs.
namenode.name.dir 下的名为 previous 的新日录中。类似地,datanode 升级存储目录,保留原先的副本,将其存放在 previous 目录中。

等待,直到升级完成,升级过程并非一蹴即就,可以用 dfsadmin 查看升级进度,升级事件同时也出现在守护进程的日志文件中:

% $NEW_HADOOP_HOME/bin/hdfs dfsadmin -upgradeProgress status 
Upgrade for version -18 has been completed.
Upgrade is not finalized.

显示升级完毕。在本阶段中,用户可以检查文件系统的状态,例如使用fsck(一个基本的文件操作)检验文件和块。检验系统状态时,最好让HDFS 进人安全模式(所有数据只读),以防止其他用户修改数据。如果新版本无法正确工作,可以回滚到前一版本,前提是尚未定妥更新。

首先,关闭新的守护进程:

% $NEW_HADOOP_HOME/bin/stop-dfs.sh

其次,使用 -rollback 选项启动旧版本的 HDFS:

% $OLD_HADOOP_HOME/bin/start-dfs.sh -rollback 

该命令会让 namenode 和 datanode 使用升级前的副本替换当前的存储目录。文件系统返回之前的状态。

定妥升级(可选),如果用户满意于新版本的 HDFS,可以定妥升级, 以移除升级前的存储目录。

在执行新的升级任务之前,必须执行这一步:

% $NEW_HADOOP_HOME/bin/hdfs dfsadmin -finalizeUpgrade 
% $NEW_HADOOP_HOME/bin/hdfs dfsadmin -upgradeProgress status 
There are no upgrades in progress.

现在,HDFS 已经完全升级到新版本了


思维导图

在这里插入图片描述


总结

本文介绍了升级Hadoop集群的步骤和注意事项,特别是HDFS的升级。

  1. 升级Hadoop集群需要进行规划,特别是对HDFS的升级需谨慎。升级操作可能导致数据丢失风险,因此在开始升级之前,务必备份数据和元数据。
  2. 建议在小型测试集群上进行升级测试,以评估可能的数据丢失风险。测试过程可以帮助用户熟悉升级过程和配置,消除技术障碍,并测试客户端的升级过程。
  3. 如果文件系统的布局没有改变,升级集群相对容易。步骤包括安装新版本的Hadoop、关闭旧的守护进程、升级配置文件、启动新的守护进程,以及让客户端使用新的库。
  4. 升级成功后,需要执行清理步骤,包括移除旧的安装和配置文件,并修复"被弃用"警告信息。
  5. Hadoop集群管理工具(Cloudera Manager和Apache Ambari)简化了升级过程,使得滚动升级成为可能。它们支持批量升级节点,以减少对客户端的服务中断。
  6. 如果HDFS文件系统布局发生变化,需要进行额外的升级步骤。在升级之前,需要确保之前一次升级已经完成,关闭相关守护进程,备份namenode目录,安装新版本的Hadoop,并使用-upgrade选项启动HDFS等。
  7. 在升级之前,建议使用fsck工具检查文件系统的状态,并保留和比较输出报告。另外,清空临时文件也是一个好的实践。
  8. 定妥升级是指在满意于新版本的HDFS后,移除升级前的存储目录。在执行新的升级任务之前,需要执行该步骤。

综上所述,本文提供了详细的升级步骤和注意事项,帮助用户顺利升级Hadoop集群,并保护数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/44530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】单例设计模式详解(包含并发、JVM)

文章目录 1、背景2、单例模式3、代码实现1、第一种实现(饿汉式)为什么属性都是static的?2、第二种实现(懒汉式,线程不安全)3、第三种实现(懒汉式,线程安全)4、第四种实现…

树莓派刷机和登入

1.打开映像工具 2.选择映像文件写入 3.拔出卡插入树莓派上电 4.树莓派登入 1.HDMI视频线,连接到显示屏幕 2.串口登录 修改系统配置,启用串口登录树莓派 (1) 打开SD卡根目录的"config.txt文件",停止蓝牙,…

使用lua脚本操作redis

redis中实现事务有两种方法: 1.WATCH监视键的变动,然后MULTI开始事务,EXEC提交事务 WATCH key [key…]:监视一个或多个键,如果在事务执行之前被修改,则事务被打断。 MULTI:标记一个事务的开始。…

Rust学习01:D-day

以前自学过Python,开发了一些小程序,用于工作中提升效率。 Python的确好学易用,但用来做一个真正意义上的产品,哪怕是比较简单的产品,差点意思,特别是在移动端开发领域。 Rust看了两本书,准备动…

Chrome 115 有哪些值得关注的新特性?

今天带大家一起来了解一下 Chrome 115 值得关注的新特性。 滚动动画 用滚动驱动的动画是网站上非常常见的用户体验模式,比如当页面向前或向后滚动时,对应的动画也会向前或向后移动。 比如下面图中这种比较常见的,页面顶部的进度条随着滚动…

C语言-print字符串打印-转义字符妙用

这里有两个有关打印的小知识 打印的字符串内容由两部分组成:可见字符、转义字符;各种字母、数字、以及空格,均属于可见字符,“\”等属于转义字符 举例: 1.直接print里面打印内容,内容直接出现 2.这里想将一…

appscan 应用

HCL appscan是个常见的web app DAST 扫描工具 有企业版和standalone 版本。大家常用的都是单机版本。企业版平台,集成了IAST。 appscan 使用比较简单,基本输入url 账号密码就开扫了。 用了一段时间几点体验 1 还是需要手动explore的,他自…

TSN -促进IT/OT 融合的网络技术

时间敏感网络(tsn)技术是IT/OT 融合的一项关键的基础网络技术,它实现了在一个异构网络中,实现OT的实时数据和IT系统的交互数据的带宽共享。 TSN允许将经典的高确定性现场总线系统和IT应用(如大数据传输)的功…

flutter开发实战-自定义相机camera功能

flutter开发实战-自定义相机camera功能。 Flutter 本质上只是一个 UI 框架,运行在宿主平台之上,Flutter 本身是无法提供一些系统能力,比如使用蓝牙、相机、GPS等,因此要在 Flutter 中调用这些能力就必须和原生平台进行通信。 实现…

vue/cli 自定义配置

vue/cli 自定义配置 1、更改默认的端口号8080 只需要更改vue.config.js文件 1、更改默认的端口号8080 只需要更改vue.config.js文件

openlayers系列:加载arcgis和geoserver在线离线切片

https://www.freesion.com/article/1751396517/ 1.背景 有个项目需要使用openlayer加载各种服务上发布的数据,坐标系也不同,我们都知道openalyer默认可以加载EPAG:3857,要加载4490的坐标系的数据需要重新定义一下,之后再加载。一想起要重新…

脑电信号处理与特征提取——4.脑电信号的预处理及数据分析要点(彭微微)

目录 四、脑电信号的预处理及数据分析要点 4.1 脑电基础知识回顾 4.2 伪迹 4.3 EEG预处理 4.3.1 滤波 4.3.2 重参考 4.3.3 分段和基线校正 4.3.4 坏段剔除 4.3.5 坏导剔除/插值 4.3.6 独立成分分析ICA 4.4 事件相关电位(ERPs) 4.4.1 如何获…

【STM32】 强大的 STM32Cube 生态 STM32CubeIDE 无伤速通

本文介绍的软件,均可以在ST官网st.com免费下载(你需要注册登录),首选官网下载最新版本,如果有问题,可以在我的公众号回复:Cube,获取截止今日的最新版本软件安装包。 目录 一、STM32C…

什么是框架?为什么要学框架?

一、什么是框架 框架是整个或部分应用的可重用设计,是可定制化的应用骨架。它可以帮开发人员简化开发过程,提高开发效率。 项目里有一部分代码:和业务无关,而又不得不写的代码>框架 项目里剩下的部分代码:实现业务…

Maven-----进阶

目录 1 分模块开发1.1 分模块开发的意义1.2 分模块开发实现 2 依赖管理2.1 依赖传递2.2 依赖传递冲突问题2.3 可选依赖和排除依赖 3 继承与聚合3.1 聚合3.2 继承3.2 聚合与继承的区别 4 属性4.1 属性4.2 资源文件引用属性4.3 版本管理 5 多环境配置与使用5.1 多环境开发5.2 跳过…

22matlab数据分析 拉格朗日插值(matlab程序)

1.简述 第一部分:问题分析 (1)实验题目:拉格朗日插值算法 具体实验要求:要求学生运用拉格朗日插值算法通过给定的平面上的n个数据点,计算拉格朗日多项式Pn(x)的值,并将其作为实际函数f(x)的估…

idea 设置了 vm options后无法启动

今天想扩展ideaj的JVM 设置了 vm options后无法启动 找了很久,重新卸载后安装也没有用 后面直接打开idea的bat文件 找到自己idea使用的.vmoptions文件,我是因为之前idea有缓存,一直用的我修改的文件,后面删了就可以启动了

基于机器视觉工具箱和形态学处理的视频中目标形状检测算法matlab仿真

目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 目标形状检测是计算机视觉领域的重要任务之一,旨在从视频序列中自动检测和识别特定目标的形状。本文介绍一种基于机器视觉工具箱和形态学处理…

【计算机网络】网络基础

文章目录 1. 网络的发展2. 认识网络协议2.1 协议栈在所有操作系统中是统一的2.2 协议分层2.3 协议各层的功能2.4 协议分层的好处 3. 具体的网络协议栈3.1 OSI七层模型3.2 TCP/IP五层模型 4. 网络通信基本流程4.1 同局域网的两台主机通信4.2 跨局域网的两台主机通信 5. 网络中的…

JavaScript基础篇(31-40题)

此文章,来源于印客学院的资料【第一部分:基础篇(105题)】,也有一些从网上查找的补充。 这里只是分享,便于学习。 诸君可以根据自己实际情况,自行衡量,看看哪里需要加强。 概述如下: javascri…