本文介绍如何通过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/ |
--dest | OSS/OSS-HDFS的目标路径。 | oss://destBucket.cn-xxx.oss-dls.aliyuncs.com/ |
--hadoopConf | 指定OSS、OSS-HDFS、Amazon S3、COS或OBS的AccessKey ID和AccessKey Secret。 |
|
--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>
相关文档
- 如果您需要使用JindoDistCp工具的更多功能,请参见JindoDistCp使用说明。
- 如果您在使用过程中遇到问题,可参见JindoDistCp常见问题进行解决。