hadoop升级流程

简介: hadoop升级流程

一、HDFS升级规划

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

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

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

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

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

二、HDFS 升级方案制定

2.1 升级方案

HDFS 官方提供两种升级方案:Express 和 RollingUpgrade。

xpress 升级过程是停止现有 HDFS 服务,然后使用新版本 HDFS 启动服务,会影响线上业务正常运行。

RollingUpgrade 升级过程是滚动升级,不停服务,对用户无感知。

鉴于 HDFS 停服对业务影响较大,我们最终选择 RollingUpgrade 方案。

2.2 降级方案

RollingUpgrade 方案中, 有两种回退方式:Rollback 和 RollingDowngrade

Rollback 会把 HDFS 版本连同数据状态回退到升级前的那一刻 ,会造成数据丢失。

RollingDowngrade 只回退 HDFS 版本,数据不受影响。

我们线上 HDFS 集群是不能容忍数据丢失的,我们最终选择 RollingDowngrade 的回退方案。

三、升级步骤

3.1 备份

在升级前最好做好数据和配置文件的备份,以免升级失败需要回滚。 [非重点,这里省略具体步骤]

3.2 部署新版本

[分别在HDFS集群的所有服务器上执行,本文是hadoop0/1/2/3]

上传hadoop-2.9.0.tar.gz到/bigdata/目录,执行以下命令解压和创建日志目录:

# cd /bigdata/
# tar -zxvf /bigdata/hadoop-2.9.0.tar.gz
# chown -R hdfs:hadoop /bigdata/hadoop-2.9.0
$ su hdfs
$ mkdir /bigdata/hadoop-2.9.0/logs
$ chmod 775 /bigdata/hadoop-2.9.0/logs

把旧的配置文件(.sh和.xml)替换到新版本的配置目录/bigdata/hadoop-2.9.0/etc/hadoop/,本文替换了9个文件,如下图:

修改所有配置文件里面定义的路径指向新版本的路径,例如是hadoop-env.sh的HADOOP_PREFIX=/bigdata/hadoop-2.9.03.3 停止HDFS集群关闭yarn高可用相关角色

yarn-daemon.sh stop resourcemanager
stop-yarn.sh
stop-dfs.sh
hadoop-daemon.sh stop journalnode

3.4 复制数据文件

HDFS集群的数据文件是保存在{user.name},此配置可以在core-site.xml重新配置,建议修改。

本文因为新旧版本的数据目录都是使用同一个,所以不需要复制数据。否则的话需要把数据复制到新版本指向的数据目录。

3.5 启动HDFS集群

在NameNode服务器上操作:

使用root用户启动安全DataNodes,NameNode:

$  ./start-all.sh

启动集群后查看日志会显示正在同步数据:

2018-04-27 15:06:36,754 INFO org.apache.hadoop.hdfs.server.common.Storage: Start linking block files from /bigdata/tmp/hadoop-hdfs/dfs/data/current/BP-185965420-192.168.1.10-1499766135884/previous.tmp/finalized to /bigdata/tmp/hadoop-hdfs/dfs/data/current/BP-185965420-192.168.1.10-1499766135884/current/finalized

同步数据的时候需要等待一段时间,视乎数据量大小。可以使用du -sh 查看对应current目录大小是否和previous.tmp目录大小一致,也可以访问集群的启动过程页面查看:3.6.1 进入安全模式

在NameNode服务器执行以下命令:

# su hdfs
$ kinit hdfs/hadoop0
$ cd /bigdata/hadoop-XXX
$ bin/hdfs dfsadmin -safemode enter
Safe mode is ON

[如果不执行此步骤会提示:Safe mode should be turned ON in order to create namespace image]

3.6.2 滚动升级准备

  • 创建fsimage,用于保证在升级失败时回滚
$ bin/hdfs dfsadmin -rollingUpgrade prepare
$ hdfs dfsadmin -rollingUpgrade query   检查fsimage是否创建成功

3.6.3 升级NameNode和SecondaryNameNode

继续在NameNode服务器执行以下命令,注意上一步骤已使用kinit命令登录kerberos:

1.关闭NN2,然后升级NN2(替换为新版本hadoop)
hdfs --daemon stop namenode
2.用“-rollingUpgrade started”选项,启动NN2作为StandbyNameNode。
hdfs --daemon start namenode -rollingUpgrade started
3.从NN1故障转移到NN2,以使NN2处于Active,NN1处于Standby。
hdfs haadmin -getServiceState nn1
注意:此处的nn1为在hdfs-site.xml中配置的namenode服务的名称。
确定要转为active的namenode的id,这里将namenode1设为active,使用命令行工具进行状态切换:
hdfs haadmin -failover --forcefence --forceactive nn1 nn2
如果手动命令切换不成功,可以命令停止NN1,观察是否自动切换。
4.关闭NN1,然后升级NN1(替换为新版本hadoop)
hdfs --daemon stop namenode
5.用"rollingUpgrade started”选项,启动NN1作为Standby“。
hdfs --daemon start namenode -rollingUpgrade started

3.6.4 升级所有DataNode

分别在所有DataNode执行以下命令:

# su hdfs
$ kinit hdfs/hadoop1
1.选择一小部分DataNode(所有的DataNode都在一个特定的机架上)。
2.运行命令“hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”,关闭选中的DataNode
hdfs dfsadmin -shutdownDatanode bigdatanode03:50020 upgrade
这种方式如果不行,直接使用命令停止
hdfs --daemon stop datanode
3.运行命令“hdfs dfsadmin -getDatanodeInfo bigdatanode03:50020”检查等待DataNode关闭
4.升级和重新启动DataNode(替换为新版本hadoop)
hdfs --daemon start datanode
5.在所有选中的机器上运行上边的步骤,一次选中的DataNode可以并行操作。

3.6.5完成滚动升级

% hdfs dfsadmin -finalizeUpgrade 
% hdfs dfsadmin -upgradeProgress status 
There are no upgrades in progress.

3.7 检查数据完整性

在NameNode服务器上操作:

上传CheckHDFSShell.jar到/bigdata/hadoop-2.9.0/目录,然后执行以下命令:

# su hdfs
$ cd /bigdata/hadoop-2.9.0
$ bin/hadoop jar CheckHDFSShell.jar \
  hdfs.CheckHDFSIntegrity \
  hdfs://hadoop0:9000 \
  /user hdfs/hadoop0@BDP.DOMAIN \
  /bigdata/kerberos-1.16/var/krb5kdc/hdfs.keytab

升级降级相关命令

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
hdfs namenode -rollingUpgrade <rollback|started>

总结

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

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

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

相关文章
|
1月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
30 1
|
1月前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
44 1
|
3月前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
92 1
|
3月前
|
存储 分布式计算 资源调度
Hadoop入门基础(一):深入探索Hadoop内部处理流程与核心三剑客
Hadoop入门基础(一):深入探索Hadoop内部处理流程与核心三剑客
|
5月前
|
分布式计算 Hadoop
Hadoop数据重分布的逻辑流程
【6月更文挑战第16天】
42 8
|
5月前
|
存储 分布式计算 大数据
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
|
5月前
|
分布式计算 并行计算 Hadoop
Hadoop数据重分布的流程
【6月更文挑战第14天】
47 5
|
6月前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS 读写流程
【4月更文挑战第9天】【Hadoop】HDFS 读写流程
|
6月前
|
存储 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
402 0
|
机器学习/深度学习 缓存 分布式计算
Hadoop基础学习---4、HDFS写、读数据流程、NameNode和SecondaryNameNode、DataNode
Hadoop基础学习---4、HDFS写、读数据流程、NameNode和SecondaryNameNode、DataNode