怎样更新Ubuntu上的Hadoop版本
更新Ubuntu系统上的Hadoop版本需遵循谨慎操作原则,优先采用滚动升级(Rolling Upgrade)方式,确保集群服务不中断且数据不丢失。以下是详细步骤:
备份关键数据与配置
备份HDFS元数据(fsimage、edits文件,位于dfs.namenode.name.dir目录)和所有配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml等),建议备份到本地或远程存储(如NFS)。同时确认集群状态健康:
hdfs dfsadmin -report # 查看所有DataNode是否正常
yarn node -list # 查看所有NodeManager是否正常
检查版本兼容性
阅读新版本Hadoop的官方升级指南(如从2.x升级到3.x),确认新版本与当前版本的兼容性(如HDFS文件格式、YARN资源配置等),重点关注不兼容的配置项变更(如3.x中dfs.replication默认值仍为3,但部分参数名称可能调整)。
准备新版本安装包
从Hadoop官方网站(https://hadoop.apache.org/releases.html)下载目标版本的二进制压缩包(如hadoop-3.3.6.tar.gz),避免使用源码包(需自行编译,增加复杂度)。
在升级前,需逐个停止集群中的所有服务(从DataNode到NameNode,从NodeManager到ResourceManager),避免服务冲突:
# 停止YARN服务
yarn --daemon stop resourcemanager
yarn --daemon stop nodemanager
# 停止HDFS服务
hdfs --daemon stop datanode
hdfs --daemon stop namenode
解压新版本安装包
将下载的安装包解压到专用目录(如/usr/local),避免与旧版本目录混淆:
sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop-new # 重命名为新版本标识
更新环境变量
修改全局环境变量配置文件(如/etc/profile),将HADOOP_HOME指向新版本目录,并更新PATH变量:
sudo vim /etc/profile
在文件末尾添加:
export HADOOP_HOME=/usr/local/hadoop-new
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # 确保指向新版本的配置目录
生效配置:
source /etc/profile
验证环境变量:
hadoop version # 应显示新版本信息(如Hadoop 3.3.6)
合并配置文件
将旧版本$HADOOP_HOME/etc/hadoop目录下的自定义配置文件(如core-site.xml、hdfs-site.xml)复制到新版本的配置目录,覆盖同名文件:
cp -r /usr/local/hadoop-old/etc/hadoop/* /usr/local/hadoop-new/etc/hadoop/
重点检查:
dfs.namenode.handler.count在3.x中改为dfs.namenode.handler.count,默认值可能调整);dfs.datanode.data.dir需明确指定数据目录)。调整数据目录权限
确保新版本的dfs.namenode.name.dir(NameNode元数据目录)和dfs.datanode.data.dir(DataNode数据目录)存在且具备正确权限(属主为hadoop用户,权限为755):
sudo mkdir -p /path/to/namenode/dir /path/to/datanode/dir # 若目录不存在则创建
sudo chown -R hadoop:hadoop /path/to/namenode/dir /path/to/datanode/dir
滚动升级需先升级NameNode,再逐个升级DataNode,确保HDFS服务不中断:
升级NameNode
停止旧版本NameNode,使用新版本启动并进入升级模式:
hdfs --daemon stop namenode # 停止旧NameNode
$HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade # 启动新NameNode并升级
查看升级进度:
hdfs dfsadmin -upgradeProgress status # 应显示“Upgrading”状态
升级DataNode
逐个停止旧版本DataNode,使用新版本启动(每次仅升级一个DataNode,避免集群不可用):
hdfs --daemon stop datanode # 在目标DataNode上停止旧服务
$HADOOP_HOME/bin/hdfs --daemon start datanode # 启动新服务
重复此步骤,直到所有DataNode均升级完成。
完成HDFS升级
确认所有DataNode升级成功后,提交升级(清理旧版本元数据):
hdfs dfsadmin -finalizeUpgrade
若新版本Hadoop包含YARN组件升级,需先升级ResourceManager,再逐个升级NodeManager:
升级ResourceManager
停止旧版本ResourceManager,使用新版本启动:
yarn --daemon stop resourcemanager # 停止旧ResourceManager
$HADOOP_HOME/bin/yarn --daemon start resourcemanager # 启动新ResourceManager
升级NodeManager
逐个停止旧版本NodeManager,使用新版本启动:
yarn --daemon stop nodemanager # 在目标NodeManager上停止旧服务
$HADOOP_HOME/bin/yarn --daemon start nodemanager # 启动新服务
检查服务状态
使用jps命令查看所有必需的守护进程是否正常运行:
jps
正常应显示:NameNode、DataNode、ResourceManager、NodeManager等进程。
运行测试任务
提交一个简单的MapReduce任务(如wordcount),验证新版本功能是否正常:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
检查输出目录/output中的结果文件,确认任务执行成功。
查看集群状态
使用Hadoop命令查看集群信息,确认版本已更新:
hdfs dfsadmin -report # 查看HDFS集群状态
yarn node -list # 查看YARN集群状态
若升级成功且运行稳定,可清理旧版本Hadoop的安装目录(如/usr/local/hadoop-old),释放磁盘空间:
sudo rm -rf /usr/local/hadoop-old
-rollback命令回滚到旧版本(如hdfs dfsadmin -rollback),但需在升级前确认旧版本数据未被清理。