使用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策略之间的副本计数差异会导致异常结果。
操作步骤
- 执行以下命令,切换到客户端安装目录。例如客户端安装目录为“/opt/client”。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 如果集群为安全模式,执行的用户需要源目录或文件读权限,目的目录有写权限,且执行以下命令进行用户认证。普通模式集群无需执行用户认证。
kinit 组件业务用户
- 创建目录并设置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>
- 在目录中上传文件。
hdfs dfs -put <localfile> <hdfs-path>
- 删除目录上的旧策略,再设置一个新的策略。
执行以下命令清除旧策略:
hdfs dfsadmin -clearAZExpression <path>
执行以下命令设置新策略:
hdfs dfsadmin -setAZExpression <path> <azexpression>
- 执行azmover命令,使副本分布满足新的AZ 策略。
hdfs azmover -p /targetDirecotry