目錄
一、需求說明
由於項目需求,需要將項目目前使用的OSS進行遷移到新的阿里雲賬號下的OSS,查看官方文檔介紹,可以使用阿里雲自帶的ossimport工具進行單機以及分布式遷移
二、Ossimport概述
OssImport工具可以將本地、其它雲存儲的數據遷移到OSS,它有以下特點:
- 支持的豐富的數據源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍雲、騰訊雲COS、金山KS3、HTTP、OSS等,並可根據需要擴展;
- 支持斷點續傳;
- 支持流量控制;
- 支持遷移指定時間后的文件、特定前綴的文件;
- 支持並行數據下載、上傳;
- 支持單機模式和分布式模式,單機模式部署簡單使用方便,分布式模式適合大規模數據遷移。
三、配置運行環境
1、配置jdk環境
[root@izuf64sdfavcgse80z ~]# yum install -y java
[root@izuf64sdfavcgse80z ~]# java --version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
2、部署方式
OssImport有單機模式和分布式模式兩種部署方式。
對於小於 30TB 的小規模數據遷移,單機模式即可完成。下載地址
對於大規模的數據遷移,請使用分布式模式。下載地址
- 單機
Master、Worker、Tracker、Console運行在一個機器上,系統中有且只有一個Worker。我們對單機模式的部署和執行進行了封裝優化,單機部署和執行都很簡單。單機模式下Master、Worker、TaskTracker、Console四個模塊統一打包成ossimport2.jar
。
3、下載並部署ossimport
# wget http://gosspublic.alicdn.com/ossimport/standalone/ossimport-2.3.1.zip?spm=a2c4g.11186623.2.12.58b029d8vsI8DG&file=ossimport-2.3.1.zip
# cd /usr/local && mkdir ossimport
# unzip ossimport-2.3.1.zip -d ossimport/
單機模式下文件結構如下:
ossimport
├── bin
│ └── ossimport2.jar # 包括Master、Worker、Tracker、Console四個模塊的總jar
├── conf
│ ├── local_job.cfg # 單機Job配置文件
│ └── sys.properties # 系統運行參數配置文件
├── console.bat # Windows命令行,可以分布執行調入任務
├── console.sh # Linux命令行,可以分布執行調入任務
├── import.bat # Windows一鍵導入,執行配置文件為conf/local_job.cfg配置的數據遷移任務,包括啟動、遷移、校驗、重試
├── import.sh # Linux一鍵導入,執行配置文件為conf/local_job.cfg配置的數據遷移任務,包括啟動、遷移、校驗、重試
├── logs # 日志目錄
└── README.md # 說明文檔,強烈建議使用前仔細閱讀
其中:
Job:用戶通過提交的數據遷移任務,對用戶來說一個任務對應一個配置文件job.cfg。
Task:Job按照 “數據大小” 和 “文件個數” 可以分成多個 Task ,每個 Task 遷移部分文件。Job切分成Task的最小單位是文件,同一個文件不會切分到多個Task中。
注意:
執行命令時請保證工作目錄為 import.sh 的同級目錄,即直接執行 bash import.sh
四、修改單機Job的配置文件local_job.cfg
[root@izuf64sdfavcgse80z ~]# vim /usr/local/ossimport/local_job.cfg #修改單機job配置文件
#以下為需要修改的內容
isIncremental=false #不開啟增量模式
srcAccessKey=ADSCVSDdc8OOFwececHd5 #配置源oss的access key
srcSecretKey=fjOKSDksdxceca8O57wdmPV #配置源oss的SecretKey
srcDomain=http://oss-cn-hangzhou-internal.aliyuncs.com #配置源oss的內網地址
srcBucket=abcimg #配置源Bucket名稱
destAccessKey=LTAIabQkcs7sxZqMd #配置目標access key
destSecretKey=aPKlasdfickv9wsd23ZOUKo4sd #配置目標secret key
destDomain=http://oss-cn-hangzhou-internal.aliyuncs.com #配置目標oss的內網地址
destBucket=abcoss #配置目標bucket名稱
- 上面配置的AccessKey和SecretKey需要在阿里雲上進行查看並配置,如圖:
- 下面為全部local_job的配置文件解析
#是否打開增量模式,如果設為true,會每間隔incrementalModeInterval(單位秒)重新掃描一次增量數據,並將增量數據同步到oss上,incrementalModeInterval不建議配置成小於3600秒的值,會浪費很多請求次數,造成額外的開銷(目前可配置的最小間隔為900秒)
isIncremental=false #遷移不開啟增量模式
incrementalModeInterval=900
##############################################################同步源端設置##############################################################
#同步源類型,目前支持:
#1.local(本地文件,此選項只需要填寫srcPrefix,不需要填寫srcAccessKey,srcSecretKey,srcDomain,srcBucket)
#2.oss(從oss的一個bucket遷移到另一個bucket)
#3.qiniu(七牛)
#4.bos(百度的雲存儲)
#5.ks3(金山的雲存儲)
#6.s3(亞馬遜s3)
#7.youpai(又拍雲,又拍雲獲取文件列表的接口比較特殊,在同步時list不支持斷點,因此在list沒有完成時殺掉同步進程會導致下次會重新全部list文件列表)
#8.http (通過提供的http鏈接列表同步數據,此選項不需要填寫srcAccessKey,srcSecretKey,srcDomain,srcBucket,srcPrefix)
#9.cos(騰訊雲)
#10.azure(微軟blob)
srcType=oss
#源access key,同步本地文件以及通過http地址同步的不需要填,大部分雲平台填寫控制台獲取的acceess key/accss key id,又拍雲填寫操作員賬號
srcAccessKey=ADSCVSDdc8OOFwececHd5 #配置源oss的access key
#源secrect key,同步本地文件以及通過http地址同步的不需要填,大部分雲平台填寫控制台獲取的secret key/access key secret,又拍雲填寫操作員密碼
srcSecretKey=fjOKSDksdxceca8O57wdmPV #配置源oss的SecretKey
#源endpoint,同步本地文件以及通過http地址同步的不需要填
#1.oss: 從控制台獲取域名(非帶bucket前綴的二級域名),域名列表參考https://help.aliyun.com/document_detail/31834.html; 例:"srcDomain=http://oss-cn-hangzhou-internal.aliyuncs.com"; 如果用阿里雲ecs虛擬機做遷移的,請使用internal域名,不計費且不受虛擬機帶寬限制(非虛擬機無法使用);例:http://oss-cn-hangzhou-internal.aliyuncs.com
#2.七牛: 從七牛控制台獲取對應bucket的域名
#3.百度bos: http://bj.bcebos.com或者http://gz.bcebos.com
#4.金山ks3: http://kss.ksyun.com或者http://ks3-cn-beijing.ksyun.com或者http://ks3-us-west-1.ksyun.com
#5.亞馬遜s3: 各個region的地址請參考http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
#6.又拍雲: http://v0.api.upyun.com(自動判斷最優線路)或者http://v1.api.upyun.com(電信線路)或者http://v2.api.upyun.com(聯通網通線路)或者http://v3.api.upyun.com(移動鐵通線路)
#7.騰訊雲: cos v3版本不需要填寫;cos v4版本需要填上bucket所在的區域,比如華南園區填寫:gz,華北園區:tj,華東園區:sh
#8.微軟blob: 連接字符串中的EndpointSuffix,如core.chinacloudapi.cn
srcDomain=http://oss-cn-hangzhou-internal.aliyuncs.com #配置源oss的內網地址
#源bucket名字,同步本地文件以及通過http地址同步的不需要填,不需要加上"/";微軟blob填container名稱
srcBucket=abcimg #配置源Bucket名稱
#源前綴,默認為空,如果srcType=local,則此目錄是本地目錄,如果是其他類型,則是源Bucket里需要同步的Object的前綴,注意如果是本地目錄,需要完整目錄路徑(以'/'進行分割並且以'/'結尾,例: c:/example/)
srcPrefix=
##############################################################同步目的端設置################################################################
#目的 access key
destAccessKey=LTAIabQkcs7sxZqMd #配置目標access key
#目的 secret key
destSecretKey=aPKlasdfickv9wsd23ZOUKo4sd #配置目標secret key
#目的endpoint,請根據您的實際oss區域填寫,默認為杭州的域名,如果用阿里雲ecs虛擬機做遷移的,請使用internal域名,不計費且不受虛擬機帶寬限制(非虛擬機無法使用);例:http://oss-cn-hangzhou-internal.aliyuncs.com
#注意:域名里不要帶上bucket前綴,oss域名幫助頁面:https://help.aliyun.com/document_detail/31837.html
destDomain=http://oss-cn-hangzhou-internal.aliyuncs.com #配置目標oss的內網地址
#目的bucket,不需要加上"/"
destBucket=abcoss #配置目標bucket名稱
#目標前綴,默認為空,直接放在bucket下(如果要將數據同步到oss的某個目錄下,請以'/'結尾),注意:oss不支持以 '/' 作為文件的開頭,所以destPrefix請不要配置以'/'做為開頭
#一個本地文件路徑為 srcPrefix + relativePath的文件,遷移到oss的路徑為destDomain/destBucket/destPrefix + relativePath
#一個雲端文件路徑為 srcDomain/srcBucket/srcPrefix + relativePath的文件,遷移到oss的路徑為destDomain/destBucket/destPrefix + relativePath
destPrefix=
##############################################################srcType=cos時的配置項###########################################################
#騰訊雲的appId
appId=0
##############################################################srcType=http時的配置選項########################################################
#srcType="http"時,需要提供http列表文件的絕對路徑,此文件中的http鏈接需要划分成兩列,分別代表前綴以及上傳到oss后的相對路徑
#例,有一個完整的http鏈接是127.0.0.1/aa/bb.jpg,不同的切分方法最后會導致上傳到oss的路徑會不一樣:
#c:/example/http.list文件內容:
#127.0.0.1/aa/ bb.jpg
#127.0.0.1/ aa/bb.jpg
# 第一行的文件導入到oss后的路徑為 "destDomain/destBucket/destPrefix" + "bb.jpg"
# 第二行的文件導入到oss后的路徑為 "destDomain/destBucket/destPrefix" + "aa/bb.jpg"
httpListFilePath=c:/example/http.list
httpPrefixColumn=1
relativePathColumn=2
##############################################################任務配置,沒有特殊需求不需要修改#################################################
#job名字,每個任務唯一,單機模式下請不要修改此項
jobName=local_test
#job類型(import/audit),import為同步數據到oss,audit為校驗源端數據和oss數據是否一致
jobType=import
#只導入源文件最后修改時間大於該時間的數據,默認為0,這個時間為unix時間戳(秒數)
importSince=0
#在校驗時,如果文件的最后修改時間大於該值,則跳過此文件的校驗,默認值0為關閉該功能,所有文件都需要校驗,這個時間為unix時間戳(秒數),jobType為audit時此項不生效
lastModify=0
#數據遷移時,是否跳過已經存在的文件。當設置為true時,根據文件的size和LastModifiedTime判斷是否跳過;為false時,總是覆蓋OSS上已有文件。jobType為audit時此項不生效。
isSkipExistFile=false
# 每個子任務最大的文件個數限制,這個會影響到任務執行的並行度,一般配置為總的文件數/120
taskObjectCountLimit=10000
#每個子任務下載的最大文件大小限制(bytes)
taskObjectSizeLimit=1000000000
#並行掃描文件列表的線程數,只影響掃描文件的效率,沒有特殊需求不要修改
scanThreadCount=10000
#最大允許並行掃描目錄的深度,默認為1就是只能在頂級目錄間並行掃描,沒有特殊需求不要修改,隨意配置的過大會導致任務無法正常運行
maxMultiThreadScanDepth=1
#大於該值的文件使用分片上傳,否則使用普通上傳,請配置大於1MB以上;有效配置值如:50m/1024m/5g
multipartUploadThreshold=150m
#分配上傳時分片大小,請配置大於100k的數據,否則無效,采用默認值50MB;有效配置值如:500k/50m/2g
multipartUploadPartSize=50m
#單個大文件分片上傳並發數,默認超過150MB為大文件,分片為50MB,srcType=local時有效,其它情況該配置項無效
#uploadThreadNumPerLargeFile大於1時,workerRecordMd5無效
uploadThreadNumPerLargeFile=3
#存儲在OSS上的數據否加密,默認不加密
isServerSideEncryption=false
#local模式時,鏈接文件是否上傳,默認不上傳;該選擇僅支持鏈接文件不包括鏈接目錄
isAllowSymbolicLink=false
# 七牛雲存儲獲取Meta的方式,有效值head和stat,默認使用stat;head通過HTTP HEAD請求獲取,stat通過BucketManager.stat
getObjectMetaMode=stat
#數據遷移后是否進行數據的正確性校驗,默認校驗
isAuditAfterImport=true
#數據校驗方式,有效值為simple/general/detailed,默認值general;simple只校驗文件的size,general校驗文件的size/lastModify/header,detailed檢驗文件的CRC或MD5,開發中
auditMode=general
五、執行遷移
[root@izuf64sdfavcgse80z ~]# cd /usr/local/ossimport
[root@izuf64sdfavcgse80z ossimport]# /bin/bash import.sh
提示:
- Job運行信息,可以查看
log/ossimport2.log
。 - Task的失敗原因,可以查看
master/jobs/${JobName}/failed_tasks/${TaskName}/audit.log
。 - Task的失敗文件,可以查看
master/jobs/${JobName}/failed_tasks/${TaskName}/error.list
。