干货-非结构化数据迁移Java-版S3Transfer

26次阅读

共计 5815 个字符,预计需要花费 15 分钟才能阅读完成。

一、操作说明

1、JAVA 版迁移工具说明

Java 版 S3Transfer 工具目前为公测阶段,此迁移工具支持从 AWS S3、阿里云、腾讯云、百度云等存储迁移文件到京东云对象存储;同时也支持本地文件列表迁移。大概逻辑为先获取文件的地址或外链,然后根据外链读取数据,然后进行迁移,这个工具是 listObject,transfer,md5check 三个工具的集成:

listObject 工具的目的是列出用户配置 bucket 下的所有文件的列表。如配置 prefix,则列出该 prefix 下的所有文件列表;

transfer 工具的目的是将源文件迁移到 oss 对象存储中;

md5check 工具用于 md5 值校验。

2、工具特点

  • 支持丰富的数据源:
    本地数据 :将本地存储的数据迁移到 OSS;
    其他对象存储: 目前支持 AWS S3,阿里云 OSS,腾讯云 COS, 百度 BOS,华为 OBS 存储迁移至京东云 OSS,后续会不断扩展;
    URL 列表:根据指定的 URL 下载列表进行下载迁移到 京东云 OSS;
    Bucket 相互复制:京东云 OSS 的 Bucket 数据相互复制, 支持跨账号跨地域及 同区域的数据复制。
  • 支持断点续传;
  • 支持流量控制;
  • 支持迁移特定前缀的文件;
  • 支持并行数据下载、上传;
  • 迁移校验:对象迁移后的校验。

3、实操迁移场景说明

为保证实操的可操作性和直观性,本文档采用大文件传输(2 个 10G 大小的文件),类型为 s3file,从京东云账号①通过外网传输至京东云账号②对象存储空间,用来模拟跨公有云之间的对象存储迁移,任务控制端为京东云的一台 Centos 7.4 云主机。

4、备注

1. 大文件传输会将单个文件分成若干个切片进行传输,如图:

2. 迁移过程中,迁移日志将默认打印到 ./log 目录下。迁移的所有文件将打印到 audit-0.log 中,迁移成功的文件将打印到 audit.success 日志中(如果将目标端传输成功的文件删除后,需要删除 audit.success 日志文件方可进行重新传输),如果需要筛选迁移失败的文件,请使用命令:

1 grep "1$" audit-0.log*

二、环境准备

1、新建云主机

2、新建 Bucket

需要准备两个京东云账号,一个在 华北 - 北京 创建对象存储空间,一个在 华东 - 上海 创建对象存储空间,以此来模拟跨公有云的对象存储迁移。

账号①- 华北 - 北京:beijing-to-shanghai
账号②- 华东 - 上海:shanghai-from-beijing

3、使用 S3fs 在云主机实例上挂载 Bucket

1. 安装依赖包

1 yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml
2 -devel make openssl-devel -y

2. 安装以及编译

1 git clone https://github.com/s3fs-fuse/s3fs-fuse.git
2 cd s3fs-fuse
3 ./autogen.sh
4 ./configure
5 make && make install

3. 创建密码文件

1 echo Access_Key_ID:Access_Key_Secret > ~/.passwd-s3fs
2 chmod 600 ~/.passwd-s3fs

Access_Key_ID:Access_Key_Secret 获取方式:https://uc.jdcloud.com/accoun…

4. 挂载对象存储到本地目录 /hcc(目录名称根据自己的名字简称定义)

1 mkdir /hcc
2 s3fs bucketname /hcc -o passwd_file=~/.passwd-s3fs -o 

url=”https://s3.cn-north-1.jcloudcs.com” mkdir:创建 hcc 文件夹作为本地挂载目录
s3fs:手动挂载命令,其中 bucketname 为 bucket 名称、/hcc 是本地挂载路径、passwd_file 为密码文件位置、url 为京东云对象存储兼容 S3 域名(请输入空间的 Bucket 域名)

5. 查看挂载结果

1 df -h

6. 通过 dd 命令在所挂载的对象存储里生成文件

这个命令会在所挂载的源对象存储 Bucket 里生成 2 个大小为 10GB 的小文件。

1 cd /hcc
2 for ((i=1;i<=2;i++));do dd if=/dev/zero of=block_$i.file bs=1M count=10240;done

文件生成结果:

4、部署 JAVA 环境

下载解压 jdk

1 [root@pocenv-hcc-test-hb ~]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jdk-8u191-linux-x64.tar.gz && tar zxf jdk-8u191-linux-x64.tar.gz && mv jdk1.8.0_191/ /usr/local/ && ln -s /usr/local/jdk1.8.0_191/ /usr/local/jdk

配置环境变量

1 vim /etc/profile

在配置文件尾部加入

1 ######## JDK #######
2 JAVA_HOME=/usr/local/jdk1.8.0_191
3 JAVA_BIN=/usr/local/jdk1.8.0_191/bin
4 PATH=$PATH:$JAVA_BIN
5 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6 export JAVA_HOME JAVA_BIN PATH CLASSPATH

重新加载变量配置文件并查看 jdk 版本

1 [root@pocenv-hcc-test-hb jdk8]# source /etc/profile
2 [root@pocenv-hcc-test-hb jdk8]# java -version
3 java version "1.8.0_191"
4 Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
5 Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

三、迁移操作

1、下载 Java 版 S3Transfer

1 [root@pocenv-hcc-test-hb ~]# mkdir -p /root/java_transfer;cd /root/java_transfer;wget https://downloads.oss.cn-north-1.jcloudcs.com/transfer-tools-java-1.0.0.jar;wget https://downloads.oss.cn-north-1.jcloudcs.com/application.yml

2、配置文件说明application.yml

重点说明:

  • jobType:任务类型,分为 listObject 列出文件、transfer 传输、md5check md5 检查,我们这里是传输,所以选择 transfer;
  • sourceType:数据来源的类型,分别为 urlfile,diskfile,s3file(AWS S3、腾讯云 COS、百度 BOS、华为 OBS、京东云 OSS)aliyunfile,disklistfile(本地文件列表),我们京东云是兼容 s3 的,所以选择 s3file;
  • src.access.id/ src.secret.key:源对象存储的 AK/SK;
  • src.endpoint:源对象存储的 Endpoint;
    阿里云:https://help.aliyun.com/docum… spm=a2c4g.11186623.6.572.6a537f5ewpHZJZ
    腾讯云:https://cloud.tencent.com/doc…
    百度云:https://cloud.baidu.com/doc/B…
    华为云:https://support.huaweicloud.c…
  • src.bucket:源对象存储的 Bucket;
  • des.access.id/des.secret.key:目标对象存储的 AK/SK;
  • des.endpoint:目标对象存储的 Endpoint;
  • des.bucket:目标对象存储的 Bucket;

注:如下标红内容是我们需要关注的(“:“后要加个空格才能生效):

##########################################################################################
#jobType 为 listObject,transfer jobType: transfer
#sourceType 类型共有:urlfile,diskfile,s3file,aliyunfile,disklistfile sourceType: s3file
#urlType : onlyUrl
#############################################################################################
#sourceType 为 urlfile,diskfile 时,filePath 为必填项
#filePath:
#urlFilePrefix: 10
#该链接的 Content-Disposition 超过京东云限制,如不获取该 header 值继续传,则配置为 true;否则将该 url 打印在错误日志里,由用户对该 url 的 header 值自行修改
ContentDispositionTooLongContinue: false
#sourceType 为 urlfile,表示从用户提供的 url 列表中迁移。文件列表内容为[object 外链,objectkey] 使用逗号分隔
########################### 源 bucket 配置 ################################################
#jdcloud
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://s3.cn-north-1.jcloudc…
#aliyun
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://oss-cn-beijing.aliyun…
#tencent
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://cos.ap-beijing.myqclo…
#baidu
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://s3.bj.bcebos.com
#aws
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://s3.us-east-2.amazonaw…
#huawei
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://obs.cn-north-1.myhuaw…
#qiniu
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://cn-south-1-s3.qiniu.com
#src.domainOfBucket : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#-bucket
#src.bucket : beijing-to-shanghai
#src.prefix :
################## 目标 bucket 配置 destination ############################################################ des.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX des.secret.key:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX des.endpoint :
http://s3.cn-east-2.jdcloud-o… des.bucket : shanghai-from-beijing
des.prefix :

3、启动 S3Transfer

后台启动:

1 [root@SpringBoot-forbuild java_transfer]# nohup java -jar transfer-tools-java-1.0.0.jar --Dspring.config.location=application.yml &

前台启动:

1 [root@SpringBoot-forbuild java_transfer]# java -jar transfer-tools-java-1.0.0.jar --Dspring.config.location=application.yml

4、启动效果

通过传输过程提示,我们可以看到文件传输状态和结果:

5、传输结果

任务传输完成后如下图:

我们点击目标对象存储空间 shanghai-from-beijing,能看到在源对象存储空间 beijing-to-shanghai 生成的两个 10GB 文件已经传输过来了。

正文完
 0