更改DataNode的存储目录
操作场景
HDFS DataNode定义的存储目录不正确或HDFS的存储规划变化时,MRS集群管理员需要在FusionInsight Manager中修改DataNode的存储目录,以保证HDFS正常工作。适用于以下场景:
- 更改DataNode角色的存储目录,所有DataNode实例的存储目录将同步修改。
- 更改DataNode单个实例的存储目录,只对单个实例生效,其他节点DataNode实例存储目录不变。
对系统的影响
- 更改DataNode角色的存储目录需要停止并重新启动HDFS服务,集群未完全启动前无法提供服务。
- 更改DataNode单个实例的存储目录需要停止并重新启动实例,该节点DataNode实例未启动前无法提供服务。
- 服务参数配置如果使用旧的存储目录,需要更新为新目录。
前提条件
- 在各个数据节点准备并安装好新磁盘,并格式化磁盘。
- 规划好新的目录路径,用于保存旧目录中的数据。
- 已安装好HDFS客户端。
- 准备好业务用户hdfs。
- 更改DataNode单个实例的存储目录时,保持活动的DataNode实例数必须大于“dfs.replication”的值。
操作步骤
检查环境
- 以root用户登录安装HDFS客户端的服务器,执行以下命令配置环境变量。
source HDFS客户端安装目录/bigdata_env
- 如果集群为安全模式,执行以下命令认证用户身份。
kinit hdfs
- 在HDFS客户端执行以下命令,检查HDFS根目录下全部目录和文件是否状态正常。
hdfs fsck /
检查fsck显示结果:
- 登录FusionInsight Manager,选择“集群 > 服务”查看HDFS的状态“运行状态”是否为“良好”。
- 修复HDFS异常的具体操作,任务结束。
- 确定修改DataNode的存储目录场景。
更改DataNode角色的存储目录
- 选择“集群 > 服务 > HDFS > 停止服务”,停止HDFS服务。
- 以root用户登录到安装HDFS服务的各个数据节点中,执行如下操作:
- 创建目标目录(data1,data2为集群原有目录)。
例如目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行mkdir -p ${BIGDATA_DATA_HOME}/hadoop/data3/dn。
- 挂载目标目录到新磁盘。例如挂载“${BIGDATA_DATA_HOME}/hadoop/data3”到新磁盘。
- 修改新目录的权限。
例如新目录路径为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行chmod 700 ${BIGDATA_DATA_HOME}/hadoop/data3/dn -R和chown omm:wheel ${BIGDATA_DATA_HOME}/hadoop/data3/dn -R。
- 将数据复制到目标目录。
例如旧目录为“${BIGDATA_DATA_HOME}/hadoop/data1/dn”,目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行cp -af ${BIGDATA_DATA_HOME}/hadoop/data1/dn/* ${BIGDATA_DATA_HOME}/hadoop/data3/dn。
- 创建目标目录(data1,data2为集群原有目录)。
- 在FusionInsight Manager管理界面,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,打开HDFS服务配置页面。
将配置项“dfs.datanode.data.dir”从默认值“%{@auto.detect.datapart.dn}”修改为新的目标目录,例如“${BIGDATA_DATA_HOME}/hadoop/data3/dn”。
例如:原有的数据存储目录为“/srv/BigData/hadoop/data1”,“/srv/BigData/hadoop/data2”,如需将data1目录的数据迁移至新建的“/srv/BigData/hadoop/data3”目录,则将服务级别的此参数替换为现有的数据存储目录,如果有多个存储目录,用“,”隔开。则本示例中,为“/srv/BigData/hadoop/data2,/srv/BigData/hadoop/data3”。
- 单击“保存”。然后在“集群 > 服务”界面启动集群中各个停止的服务。
- 启动HDFS成功以后,在HDFS客户端执行以下命令,检查HDFS根目录下全部目录和文件是否复制正确。
hdfs fsck /
检查fsck显示结果:
- 显示如下信息,表示无文件丢失或损坏,数据复制成功,操作结束。
The filesystem under path '/' is HEALTHY
- 显示其他信息,表示有文件丢失或损坏,则检查8.d是否正确,并执行hdfs fsck 损坏的文件名称 -delete。
- 显示如下信息,表示无文件丢失或损坏,数据复制成功,操作结束。
更改DataNode单个实例的存储目录
- 选择“集群 > 服务 > HDFS > 实例”,勾选需要修改存储目录的DataNode单个实例,选择“更多 > 停止实例”。
- 以root用户登录到这个DataNode节点,执行如下操作。
- 创建目标目录。
例如目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行mkdir -p ${BIGDATA_DATA_HOME}/hadoop/data3/dn。
- 挂载目标目录到新磁盘。
- 修改新目录的权限。
例如新目录路径为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行chmod 700 ${BIGDATA_DATA_HOME}/hadoop/data3/dn -R和chown omm:wheel ${BIGDATA_DATA_HOME}/hadoop/data3/dn -R。
- 将数据复制到目标目录。
例如旧目录为“${BIGDATA_DATA_HOME}/hadoop/data1/dn”,目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:
执行cp -af ${BIGDATA_DATA_HOME}/hadoop/data1/dn/* ${BIGDATA_DATA_HOME}/hadoop/data3/dn。
- 创建目标目录。
- 在FusionInsight Manager管理界面,选择“集群 > 服务 > HDFS > 实例”,单击指定的DataNode实例并切换到“实例配置”页签。
将配置项“dfs.datanode.data.dir”从默认值“%{@auto.detect.datapart.dn}”修改为新的目标目录,例如“${BIGDATA_DATA_HOME}/hadoop/data3/dn”。
示例:原有的数据存储目录为“/srv/BigData/hadoop/data1,/srv/BigData/hadoop/data2”,此处如需将data1目录的数据迁移至新建的/srv/BigData/hadoop/data3目录,则将该参数修改为“/srv/BigData/hadoop/data2,/srv/BigData/hadoop/data3”。
- 单击“保存”,单击“确定”。
界面提示“操作成功。”,单击“完成”。
- 选择“更多 > 重启实例”,重启DataNode实例。