本文介绍如何通过JindoDistCp工具,将第三方云对象存储中的数据迁移到OSS/OSS-HDFS。

前提条件

准备迁移环境并下载JindoDistCp工具,参见JindoDistCp使用说明

拷贝数据到阿里云OSS/OSS-HDFS上

您可以使用如下命令将第三方云对象存储上的目录拷贝到OSS/OSS-HDFS上。
hadoop jar jindo-distcp-tool-${version}.jar s3://example-s3-bucket/data --dest oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret --parallelism 10
参数描述示例
--src第三方云对象存储路径。s3://example-s3-bucket/data/
--destOSS/OSS-HDFS的目标路径。oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/
--hadoopConf指定OSS、OSS-HDFS、Amazon S3、COS或OBS的AccessKey ID和AccessKey Secret。
  • 配置OSS/OSS-HDFS的AccessKey ID:fs.oss.accessKeyId=yourkey
  • 配置OSS/OSS-HDFS的AccessKey Secret:fs.oss.accessKeySecret=yoursecret
--parallelism任务并发大小,根据集群资源可调整。10

拷贝增量文件

场景说明:
  • Distcp任务在执行期间失败,您想进行断点续传,只拷贝剩下未拷贝成功的文件。
  • 源端文件新增了部分文件,只拷贝新增的文件。
在上一次Distcp任务完成后,使用--update参数,将src中新增或发生改变的文件和目录同步到dest上。
hadoop jar jindo-distcp-tool-${version}.jar --src s3://example-s3-bucket/data --dest oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret --update --parallelism 20

设置YARN队列和带宽大小

如果您需要设置DistCp作业使用的YARN队列和带宽大小,可使用如下命令:
hadoop jar jindo-distcp-tool-${version}.jar --src s3://example-s3-bucket/data  --dest oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/dir/ --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret --hadoopConf mapreduce.job.queuename=yarnQueue --bandWidth 100 --parallelism 10
参数描述
--hadoopConf mapreduce.job.queuename=yarnQueue指定YARN队列的名称。
--bandWidth指定单机限流带宽的大小,单位:MB。

配置访问第三方云对象存储的AccessKey

您可以在命令中使用--hadoopConf参数,指定AccessKey ID和AccessKey Secret来获得访问第三方云对象存储的权限。
  • Amazon S3示例命令如下:
    hadoop jar jindo-distcp-tool-${version}.jar --src s3://example-s3-bucket/data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.s3.accessKeyId=yourkey --hadoopConf fs.s3.accessKeySecret=yoursecret
  • COS示例命令如下:
    hadoop jar jindo-distcp-tool-${version}.jar --src cos://example-cos-bucket/data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.cos.accessKeyId=yourkey --hadoopConf fs.cos.accessKeySecret=yoursecret
  • OBS示例命令如下:
    hadoop jar jindo-distcp-tool-${version}.jar --src obs://example-obs-bucket/data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.obs.accessKeyId=yourkey --hadoopConf fs.obs.accessKeySecret=yoursecret
您也可以将第三方云对象存储的AccessKey ID和AccessKey Secret预先配置在Hadoop的core-site.xml文件里 ,避免每次使用时临时填写。以S3为例,配置示例如下。
<configuration>
    <property>
        <name>fs.s3.accessKeyId</name>
        <value>xxx</value>
    </property>

    <property>
        <name>fs.s3.accessKeySecret</name>
        <value>xxx</value>
    </property>
</configuration>

配置OSS/OSS-HDFS的AccessKey ID和AccessKey Secret

通常您需要将OSS/OSS-HDFS的AccessKey ID和AccessKey Secret信息写在参数里,但是JindoDistCp可以将其预先写在Hadoop的core-site.xml文件里 ,避免使用时多次填写的问题。配置示例如下。
<configuration>
    <property>
        <name>fs.oss.accessKeyId</name>
        <value>xxx</value>
    </property>

    <property>
        <name>fs.oss.accessKeySecret</name>
        <value>xxx</value>
    </property>
</configuration>

配置OSS-HDFS Endpoint

访问OSS-HDFS需要配置Endpoint(cn-xxx.oss-dls.aliyuncs.com),与OSS对象接口的Endpoint(oss-cn-xxx-internal.aliyuncs.com)不同。JindoSDK会根据配置的Endpoint访问OSS-HDFS或OSS对象接口。

使用OSS-HDFS时,推荐访问路径格式为:oss://<Bucket>.<Endpoint>/<Object>。例如oss://mydlsbucket.cn-shanghai.oss-dls.aliyuncs.com/Test

这种方式在访问路径中包含OSS-HDFS的Endpoint,JindoSDK会根据路径中的Endpoint访问对应的OSS-HDFS接口。JindoSDK还支持更多的Endpoint配置方式,详情请参见阿里云OSS-HDFS服务(JindoFS 服务)Endpoint配置
重要 JindoSDK 4.4.0及以上版本默认使用域名分离的方式,数据读写域名默认使用内网标准OSS域名。如果在非阿里云内网环境执行distcp命令,则需要在Hadoop的core-site.xml文件中配置数据流访问的公网OSS Endpoint。配置示例如下。
<configuration>
    <property>
        <name>fs.oss.data.endpoint</name>
        <value>oss-cn-xxx.aliyuncs.com</value>
    </property>
</configuration>

相关文档