数据从三方云对象存储迁移到 OSS/OSS-HDFS§

使用前须知§

1、拷贝数据到阿里云 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/
--dest OSS/OSS-HDFS 的目标路径。 oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/
--hadoopConf 指定 OSS/OSS-HDFS/S3/COS/OBS 的 Access Key ID,Access Key Secret * 配置 OSS/OSS-HDFS 的 AccessKeyId:
--hadoopConf fs.oss.accessKeyId=yourkey
* 配置 OSS/OSS-HDFS 的 AccessKeySecret:
--hadoopConf fs.oss.accessKeySecret=yoursecret
--parallelism 任务并发大小,根据集群资源可调整。 10

2、增量拷贝文件§

如果 Distcp 任务因为各种原因中间失败了,而此时您想进行断点续传,只Copy剩下未Copy成功的文件。或者源端文件新增了部分文件,此时需要您在进行上一次 Distcp 任务完成后进行如下操作:

使用 --update 命令,获得增量的文件列表§
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

3、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

4、配置访问三方云对象存储的 AK§

您可以通过指定 AK 来获得访问三方云对象存储的权限。您可以在命令中使用 --hadoopConf 选项来指定 AK。

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

您也可以将三方云对象存储的 AK 预先配置在 Hadoop 的 core-site.xml 文件里 ,避免每次使用时临时填写 AK, 以 S3 为例。

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

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

5、配置 OSS/OSS-HDFS 的 AK§

通常您需要将 OSS/OSS-HDFS AccessKey/AccessSecret 信息写在参数里,但是 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>

6、配置 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/OSS-HDFS 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>

7、其他功能§

如您需要其他使用其他功能,请参考: * JindoDistCp 使用说明