迁移HDFS数据到OSS-HDFS

如果您需要对HDFS数据进行备份、或者在HDFS存储空间不足且需要弹性扩展存储能力时,您可以通过阿里云EMR集群自动部署的Jindo DistCp工具将HDFS迁移数据到OSS-HDFS。OSS-HDFSHadoop生态系统兼容,将HDFS中的数据迁移到OSS-HDFS后,可以利用Hadoop生态系统的各种工具和框架进行数据处理和分析。

前提条件

  • 已创建阿里云EMR-5.6.0及后续版本或EMR-3.40.0及后续版本的集群。具体步骤,请参见创建集群

  • 如果您使用的是自建ECS集群,需确保集群具备Hadoop2.7+或Hadoop3.x环境以及进行MapReduce作业的能力。通过自建ECS集群完成迁移任务前,您需要自行部署JindoData(JindoData包含JindoSDK以及JindoFSx)。建议跟随版本迭代,下载最新版本。

  • 已开通并授权访问OSS-HDFS服务。具体操作,请参见开通并授权访问OSS-HDFS服务

背景信息

阿里云Jindo DistCp(分布式文件拷贝工具)用于大规模集群内部或集群之间拷贝文件。Jindo DistCp使用MapReduce实现文件分发,错误处理和恢复,把文件和目录的列表作为MapReduce任务的输入,每个任务会完成源列表中部分文件的拷贝。Jindo DistCp全量支持HDFS之间、HDFSOSS之间、HDFSOSS-HDFS之间以及OSS-HDFS之间数据拷贝场景,提供多种个性化拷贝参数和多种拷贝策略。

使用阿里云Jindo DistCp迁移数据时,有以下优势:

  • 效率高,在测试场景中最高可达到1.59倍的加速。

  • 基本功能丰富,提供多种拷贝方式和场景优化策略。

  • 深度结合OSS,对文件提供归档、压缩等操作。

  • 实现No-Rename拷贝,保证数据一致性。

  • 场景全面,可完全替代Hadoop DistCp,目前支持Hadoop2.7+和Hadoop3.x。

操作步骤

  1. 登录EMR集群。

    1. 登录EMR on ECS控制台

    2. 单击创建的EMR集群。

    3. 单击节点管理页签,然后单击节点组左侧的+.jpg

    4. 单击ECS ID。在ECS实例页面,单击实例ID右侧的远程连接

      如果您希望使用SSH方式(SSH密钥对或SSH密码)在WindowsLinux环境中登录集群,请参见登录集群

  2. HDFS指定路径下的数据迁移至OSS-HDFS。

    1. 执行以下命令查看HDFS下的数据。

      hdfs dfs -ls /

      返回结果如下:

      Found 8 items
      drwxrwxrwx - admin supergroup 0 2023-10-26 10:55 /.sysinfo
      drwxrwxrwx - hadoop supergroup 0 2023-10-26 10:55 /apps
      drwxrwxrwx - root supergroup 0 2022-08-03 15:54 /data
      -rw-r----- 1 root supergroup 13 2022-08-25 11:45 /examplefile.txt
      drwxrwxrwx - spark supergroup 0 2023-10-26 14:49 /spark-history
      drwx-wx-wx - hive supergroup 0 2023-10-26 13:35 /tmp
      drwxrwxrwx - hive supergroup 0 2023-10-26 14:48 /user
      drwxrwxrwx - hadoop supergroup 0 2023-10-26 14:48 /yarn
    2. 切换至jindo-distcp-tool-${version}.jar包所在目录。

      cd /opt/apps/JINDOSDK/jindosdk-current/tools
    3. 查看随EMR集群自动部署的jindo-distcp-tool的版本号。

      ls
    4. HDFS中的数据迁移至OSS-HDFS。

      全量迁移或拷贝数据

      HDFS指定目录/tmp下的数据全量迁移或拷贝到OSS-HDFS目标路径oss://examplebucket/dir。以jindo-distcp-tool-6.1.0.jar为例,您需要根据实际环境替换对应的版本号。

      hadoop jar jindo-distcp-tool-6.1.0.jar --src /tmp/ --dest oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=LTAI********  --hadoopConf fs.oss.accessKeySecret=KZo1******** --parallelism 10

      示例中涉及的各参数或选项说明如下:

      参数及选项

      说明

      示例

      --src

      待迁移或拷贝的HDFS数据所在的路径。

      /tmp/

      --dest

      OSS-HDFS中存放迁移或拷贝数据的目标路径。

      oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/

      --hadoopConf

      访问OSS-HDFS服务的AccessKey IDAccessKey Secret。

      • AccessKey ID

        LTAI******** 
      • AccessKey Secret

        KZo1********

      --parallelism

      根据集群资源调整任务并发数。

      10

      增量迁移或拷贝数据

      如果您仅希望拷贝在上一次全量迁移或拷贝后源路径下新增的数据,此时您可以结合--update选项完成数据的增量迁移或拷贝。

      例如,将HDFS指定目录data/下的数据增量迁移或拷贝到OSS-HDFS目标路径oss://destbucket/dir下。

      hadoop jar jindo-distcp-tool-6.1.0.jar --src /data/ --dest oss://destbucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=LTAI********  --hadoopConf fs.oss.accessKeySecret=KZo1******** --update --parallelism 10

相关文档