更新时间:2024-11-29 GMT+08:00

更改DataNode的存储目录

操作场景

HDFS DataNode定义的存储目录不正确或HDFS的存储规划变化时,MRS集群管理员需要在FusionInsight Manager中修改DataNode的存储目录,以保证HDFS正常工作。适用于以下场景:

  • 更改DataNode角色的存储目录,所有DataNode实例的存储目录将同步修改。
  • 更改DataNode单个实例的存储目录,只对单个实例生效,其他节点DataNode实例存储目录不变。

对系统的影响

  • 更改DataNode角色的存储目录需要停止并重新启动HDFS服务,集群未完全启动前无法提供服务。
  • 更改DataNode单个实例的存储目录需要停止并重新启动实例,该节点DataNode实例未启动前无法提供服务。
  • 服务参数配置如果使用旧的存储目录,需要更新为新目录。

前提条件

  • 在各个数据节点准备并安装好新磁盘,并格式化磁盘。
  • 规划好新的目录路径,用于保存旧目录中的数据。
  • 已安装好HDFS客户端。
  • 准备好业务用户hdfs
  • 更改DataNode单个实例的存储目录时,保持活动的DataNode实例数必须大于“dfs.replication”的值。

操作步骤

检查环境

  1. root用户登录安装HDFS客户端的服务器,执行以下命令配置环境变量。

    source HDFS客户端安装目录/bigdata_env

  2. 如果集群为安全模式,执行以下命令认证用户身份。

    kinit hdfs

  3. 在HDFS客户端执行以下命令,检查HDFS根目录下全部目录和文件是否状态正常。

    hdfs fsck /

    检查fsck显示结果:

    • 显示如下信息,表示无文件丢失或损坏,执行4
      The filesystem under path '/' is HEALTHY
    • 显示其他信息,表示有文件丢失或损坏,执行5

  4. 登录FusionInsight Manager,选择“集群 > 服务”查看HDFS的状态“运行状态”是否为“良好”。

    • 是,执行6
    • 否,HDFS状态不健康,执行5

  5. 修复HDFS异常的具体操作,任务结束。
  6. 确定修改DataNode的存储目录场景。

    • 更改DataNode角色的存储目录,执行7
    • 更改DataNode单个实例的存储目录,执行12

更改DataNode角色的存储目录

  1. 选择“集群 > 服务 > HDFS > 停止服务”,停止HDFS服务。
  2. root用户登录到安装HDFS服务的各个数据节点中,执行如下操作:

    1. 创建目标目录(data1,data2为集群原有目录)。

      例如目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:

      执行mkdir -p ${BIGDATA_DATA_HOME}/hadoop/data3/dn

    2. 挂载目标目录到新磁盘。例如挂载“${BIGDATA_DATA_HOME}/hadoop/data3”到新磁盘。
    3. 修改新目录的权限。

      例如新目录路径为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:

      执行chmod 700 ${BIGDATA_DATA_HOME}/hadoop/data3/dn -Rchown omm:wheel ${BIGDATA_DATA_HOME}/hadoop/data3/dn -R

    4. 将数据复制到目标目录。

      例如旧目录为“${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

  3. 在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”。

  4. 单击“保存”。然后在“集群 > 服务”界面启动集群中各个停止的服务。
  5. 启动HDFS成功以后,在HDFS客户端执行以下命令,检查HDFS根目录下全部目录和文件是否复制正确。

    hdfs fsck /

    检查fsck显示结果:

    • 显示如下信息,表示无文件丢失或损坏,数据复制成功,操作结束。
      The filesystem under path '/' is HEALTHY
    • 显示其他信息,表示有文件丢失或损坏,则检查8.d是否正确,并执行hdfs fsck 损坏的文件名称 -delete

更改DataNode单个实例的存储目录

  1. 选择“集群 > 服务 > HDFS > 实例”,勾选需要修改存储目录的DataNode单个实例,选择“更多 > 停止实例”。
  2. root用户登录到这个DataNode节点,执行如下操作。

    1. 创建目标目录。

      例如目标目录为“${BIGDATA_DATA_HOME}/hadoop/data3/dn”:

      执行mkdir -p ${BIGDATA_DATA_HOME}/hadoop/data3/dn

    2. 挂载目标目录到新磁盘。

      例如挂载“${BIGDATA_DATA_HOME}/hadoop/data3”到新磁盘。

    3. 修改新目录的权限。

      例如新目录路径为“${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

    4. 将数据复制到目标目录。

      例如旧目录为“${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

  3. 在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”。

  4. 单击“保存”,单击“确定”。

    界面提示“操作成功。”,单击“完成”。

  5. 选择“更多 > 重启实例”,重启DataNode实例。