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

使用HDFS AZ Mover

操作场景

AZ Mover是一个副本迁移工具,用来移动副本以满足目录上设置的新AZ策略。它可以用来从一个AZ策略迁移到另一个AZ策略,AZ Mover通过指示NameNode按照新的AZ策略来移动副本,如果NameNode拒绝删除旧副本就不能保证一定能满足新的策略,例如副本被标记为过时等原因。

使用限制

  • 将策略更改为LOCAL_AZ与更改为ONE_AZ相同,因为上传文件写入时无法确定写入期间的客户端位置。
  • Mover无法确定AZ的状态,因此可能会导致将副本移动到异常的AZ,并依赖NameNode来进一步处理。
  • Mover依赖于每个AZ的DataNode节点数达到最小要求,如果在一个DataNode节点数很少的AZ执行,可能会导致与预期不同的结果。
  • Mover只满足AZ级别的策略,并不保证满足基本BPP。
  • Mover不支持更改复制因子,新旧AZ策略之间的副本计数差异会导致异常结果。

操作步骤

  1. 执行以下命令,切换到客户端安装目录。例如客户端安装目录为“/opt/client”。

    cd /opt/client

  2. 执行以下命令配置环境变量。

    source bigdata_env

  3. 如果集群为安全模式,执行的用户需要源目录或文件读权限,目的目录有写权限,且执行以下命令进行用户认证。普通模式集群无需执行用户认证。

    kinit 组件业务用户

  4. 创建目录并设置AZ策略。

    执行以下命令创建目录:

    hdfs dfs -mkdir <path>

    执行以下命令设置AZ策略,azexpression代表AZ策略:

    hdfs dfsadmin -setAZExpression <path> <azexpression>

    <azexpression>中包含“|“时,AZ表达式需要加上双引号,例如:

    hdfs dfsadmin -setAZExpression /az "REP[3]:AZ1[1][*],AZ2||AZ3[1]"

    执行以下命令查看AZ策略:

    hdfs dfsadmin -getAZExpression <path>

  5. 在目录中上传文件。

    hdfs dfs -put <localfile> <hdfs-path>

  6. 删除目录上的旧策略,再设置一个新的策略。

    执行以下命令清除旧策略:

    hdfs dfsadmin -clearAZExpression <path>

    执行以下命令设置新策略:

    hdfs dfsadmin -setAZExpression <path> <azexpression>

  7. 执行azmover命令,使副本分布满足新的AZ 策略。

    hdfs azmover -p /targetDirecotry