1. 程式人生 > >乾貨 | 非結構化資料遷移-Java 版S3Transfer

乾貨 | 非結構化資料遷移-Java 版S3Transfer

 

一、操作說明

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、新建雲主機

地域 作業系統 配置 頻寬 JDK版本
華北-北京 CentOS 7.4 64位 8核16G 20Mbps 1.8.0_191

2、新建Bucket

需要準備兩個京東雲賬號,一個在華北-北京建立物件儲存空間,一個在華東-上海建立物件儲存空間,以此來模擬跨公有云的物件儲存遷移。

賬號①-華北-北京:beijing-to-shanghai
賬號②-華東-上海:shanghai-from-beijing

3、使用S3fs在雲主機例項上掛載Bucket

  1. 安裝依賴包

1 yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-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/account/accessKey

   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/document_detail/31837.html?spm=a2c4g.11186623.6.572.6a537f5ewpHZJZ
    騰訊雲:https://cloud.tencent.com/document/product/436/6224
    百度雲:https://cloud.baidu.com/doc/BOS/S3.html#.E6.9C.8D.E5.8A.A1.E5.9F.9F.E5.90.8D
    華為雲:https://support.huaweicloud.com/api-obs/zh-cn_topic_0136050628.html

  • 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.jcloudcs.com

#aliyun
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://oss-cn-beijing.aliyuncs.com

#tencent
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://cos.ap-beijing.myqcloud.com

#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.amazonaws.com

#huawei
#src.access.id : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.secret.key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#src.endpoint : https://obs.cn-north-1.myhuaweicloud.com

#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-oss.com
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檔案已經傳輸過來了。