ossimport是一款將資料移轉至OSS的工具。您可以將ossimport部署在本機伺服器或雲上ECS執行個體內,將您本地或其他雲端儲存的資料移轉到OSS,同時,阿里雲還為您提供標準化的線上遷移服務與跨地區複製服務,協助您白屏化實現儲存資料上雲與OSS之間的資料複製能力。
ossimport不對遷移檔案進行校正,無法保證遷移結果的正確性和一致性。在遷移任務完成後,請您務必自行做好源端和目的端資料的一致性校正。
如您在未校正源端和目的端資料一致性前,刪除來源資料,由此所引起的一切損失和後果均由您自行承擔。
如果您需要遷移其他第三方資料來源,推薦使用線上遷移服務遷移您的資料。
如果您需要在兩個不同的Bucket中進行OSS資料的近即時複製,推薦使用OSS跨地區複製功能。
支援特性
支援豐富的資料來源,包括本地檔案、七牛雲Kodo、百度BOS、Amazon S3、Azure Blob、又拍雲USS、騰訊雲COS、金山KS3、HTTP或HTTPS URL列表、阿里雲OSS等,並可根據需要擴充。
支援單機模式和分布式模式。單機模式部署簡單,使用方便,分布式模式適合大規模資料移轉。
說明單機模式下一次只能遷移一個Bucket。
支援斷點續傳。
支援流量控制。
支援遷移指定時間以後的檔案、特定首碼的檔案。
支援並發資料下載和上傳。
計費說明
ossimport工具本身不收費。在公用雲端情況下,資料來源可能會產生公網流出流量、請求等費用,目的端為OSS會產生請求費用等。如果OSS開通和使用了傳輸加速,還會產生傳輸加速的費用。
注意事項
遷移速度
ossimport遷移速度取決於源端的讀取頻寬、本網頻寬、檔案大小等因素。對於小於200 KB檔案的遷移,因IOPS使用率高的原因,可能會導致遷移較慢的問題。
源端資料為歸檔類型
通過ossimport遷移資料時,如果源端資料為歸檔類型,您需要對這部分資料解凍完成後再進行遷移。
本地中轉
通過ossimport遷移資料時,資料流會經過本地記憶體中轉後再上傳至目的端。
保留源端資料
通過ossimport遷移資料時,僅對源端資料執行讀取操作,不對源端資料進行修改和刪除。
其他遷移工具(ossutil)
對於遷移小於30 TB的資料,推薦使用ossutil。該工具簡單方便,通過-u,--update和--snapshot-path選項還可以實現檔案的增量遷移,詳細說明請參見cp。
運行環境
ossimport可以部署在Linux或Windows系統上,要求如下:
Windows7及以上版本
CentOS 6或者CentOS 7
Java 7或者Java 8
分布式部署暫時不支援Windows系統。
部署方式選擇
ossimport有單機模式和分布式模式兩種部署方式。
單機模式:當您需要遷移的資料小於30 TB時,推薦部署單機模式。您可以將ossimport部署在任意一台可以訪問您待遷移資料,且可以訪問OSS的機器上。
分布式模式:當您需要遷移的資料大於30 TB時,推薦部署分布式模式。您可以將ossimport部署在任意多台可以訪問您待遷移資料,且可以訪問OSS的機器上。
說明當您待遷移的資料過大時,為了節約時間,您可以將ossimport部署到與您OSS相同地區的ECS執行個體上,並通過專線將來源資料存放的伺服器掛載到阿里雲VPC網路中。多台ECS執行個體將資料通過內網遷移至OSS,會極大的提升資料移轉效率。
您也可以使用ossimport通過公網傳輸,傳輸速度受您本機伺服器的頻寬影響。
單機模式
Master、Worker、Tracker、Console運行在一台機器上,統一打包成ossimport2.jar。系統中有且只有一個Worker。
單機模式下檔案結構如下:
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 # 說明文檔,強烈建議使用前仔細閱讀import.bat/import.sh為一鍵匯入指令碼,修改完
local_job.cfg後可以直接運行。console.bat/console.sh為命令列工具,可用於分布執行命令。
指令碼或命令請在
ossimport目錄下執行,即*.bat/*.sh的同級目錄。
分布式模式
ossimport是基於master-worker的分布式架構,結構如下:
Master --------- Job --------- Console
|
|
TaskTracker
|_____________________
|Task | Task | Task
| | |
Worker Worker Worker參數 | 說明 |
Master | 負責將Job切分成Task,按照資料大小和檔案個數分解成Task,資料大小/檔案個數可以在sys.properties中配置。Job切分成Task的詳細過程如下:
|
Worker |
|
TaskTracker | 簡稱Tracker,負責Task的分發、Task狀態跟蹤。 |
Console | 負責與使用者互動,接受命令並顯示結果。支援系統管理命令deploy/start/stop,Job管理命令 submit/retry/clean。 |
Job | 使用者提交的資料移轉任務,對使用者來說一個任務對應一個設定檔 |
Task | Job按照資料大小和檔案個數可以分成多個Task ,每個Task 遷移部分檔案。Job切分成Task的最小單位是檔案,同一個檔案不會切分到多個Task中。 |
分布式模式下可以啟動多台機器執行資料移轉,每台機器上只能啟動一個Worker。Task平均分配到Worker上執行,一個Worker執行多個Task。
分布式模式下檔案結構如下:
ossimport
├── bin
│ ├── console.jar # Console模組jar包
│ ├── master.jar # Master模組jar包
│ ├── tracker.jar # Tracker模組jar包
│ └── worker.jar # Worker模組jar包
├── conf
│ ├── job.cfg # Job設定檔範本
│ ├── sys.properties # 系統運行參數設定檔
│ └── workers # Worker列表
├── console.sh # 命令列工具,目前支援只Linux
├── logs # 日誌目錄
└── README.md # 說明文檔,強烈建議使用前仔細閱讀設定檔
單機模式下有兩個設定檔sys.properties、local_job.cfg,分布式模式下有三個設定檔sys.properties、job.cfg、workers。其中local_job.cfg和job.cfg的配置項是完全一樣的,只是名稱不一樣,workers是分布式環境特有的。
sys.properties:系統運行參數
參數
含義
說明
workingDir
工作目錄
工具包解壓後的目錄。單機模式下請不要修改此參數,分布式模式下每個機器的工作目錄必須相同。
workerUser
Worker機器的ssh使用者名稱
如果配置了privateKeyFile ,則優先使用privateKeyFile。
如果沒有配置privateKeyFile,則使用workerUser/workerPassword。
單機模式不需要修改此參數。
workerPassword
Worker機器的ssh使用者密碼
單機模式不需要修改此參數。
privateKeyFile
private key檔案路徑
如果已經打通了ssh通道,則可以指定此參數,否則為空白。
如果配置了privateKeyFile,則優先使用privateKeyFile。
如果沒有配置privateKeyFile,則使用workerUser/workerPassword。
單機模式不需要修改此參數。
sshPort
ssh連接埠
預設22,一般情況無需更改。 單機模式不需要修改此參數。
workerTaskThreadNum
Worker執行Task的最大線程數
該參數與機器的記憶體/網路有關,建議值60 。
物理機可以適當加大,例如150 。如果網路頻寬已佔滿,請不要再加大。
如果網路較差,請適當降低,例如30。防止請求競爭網路造成大量請求逾時。
workerMaxThroughput(KB/s)
worker資料移轉的資料傳輸量上限
該值能起到限流作用,預設0表示不限流。
dispatcherThreadNum
Tracker的Task分發與狀態確認的線程數
預設值一般夠用,沒有特殊需要請不要修改預設值。
workerAbortWhenUncatchedException
表示遇到未知錯誤時是跳過還是終止
預設跳過。
workerRecordMd5
在OSS中是否使用中繼資料x-oss-meta-md5記錄遷移檔案的MD5值,預設不記錄。
主要用於使用者使用MD5校正檔案資料。
job.cfg:資料移轉任務配置,
local_job.cfg和job.cfg的配置項是完全一樣的,只是名稱不一樣。參數
含義
說明
jobName
任務名字,字串。
任務的唯一標識,命名規則 [a-zA-Z0-9_-]{4,128},支援提交多個名字不同的任務。
如果重複提交同名任務會提示任務已存在,清理(clean)同名任務前, 無法提交同名任務。
jobType
任務類型,字串
預設為
import。
isIncremental
是否開啟增量移轉模式,布爾類型。
預設值false。
如果設為true,會每間隔incrementalModeInterval(單位秒)重新掃描一次增量資料,並將增量資料移轉到OSS。
incrementalModeInterval
增量模式下的同步間隔,整型,單位秒。
isIncremental=true時有效。可配置的最小間隔為900秒,不建議配置成小於3600秒的值,會浪費大量請求,造成額外的系統開銷。
importSince
遷移大於該時間的資料,整型,單位秒。
該時間為 Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s擷取。
預設為0,表示遷移全部資料。
srcType
同步源類型,字串, 請注意大小寫。
支援以下類型:
local:從本地檔案遷移資料到OSS,該選項只需要填寫srcPrefix, 不需要填寫srcAccessKey,srcSecretKey,srcDomain,srcBucket。oss:從一個 OSS bucket 遷移到另一個 bucket。qiniu:從七牛雲端儲存遷移到OSS。bos:從百度的雲端儲存遷移到OSS。ks3:從金山雲端儲存遷移到OSS。s3:從 Amazon S3遷移到OSS。youpai:從又拍雲遷移到OSS。http:通過提供的HTTP或者HTTPS連結清單遷移資料到OSS。cos:從騰訊雲端儲存COS遷移到OSS。azure:從Azure Blob遷移到OSS。
srcAccessKey
源AccessKey,字串。
如果srcType設定為
oss、qiniu、baidu、ks3、s3,則填寫資料來源的AccessKey。如果srcType設定為
local、http,則該項不需要填寫。如果srcType設定為
youpai、azure,則填寫使用者名稱AccountName。
srcSecretKey
源SecretKey,字串。
如果srcType設定為
oss、qiniu、baidu、ks3、s3,則填寫資料來源的 SecretKey。如果srcType設定為
local、http,則該項不需要填寫。如果srcType設定為
youpai,則填寫操作員密碼。如果srcType設定為
azure,則填寫AccountKey。
srcDomain
源Endpoint
如果srcType設定為
local、http,則該項不需要填寫。如果srcType設定為
oss,則填寫從控制台擷取的網域名稱,非帶bucket首碼的次層網域。如果srcType設定為
qiniu,則填寫從七牛控制台擷取的對應bucket的網域名稱。如果srcType設定為bos,則填寫百度BOS網域名稱,如
http://bj.bcebos.com或http://gz.bcebos.com。如果srcType設定為ks3,則填寫金山ks3網域名稱,如
http://kss.ksyun.com或http://ks3-cn-beijing.ksyun.com或http://ks3-us-west-1.ksyun.coms。如果srcType設定為
S3, 則填寫Amazon S3各region的網域名稱。如果srcType設定為
youpai,則填寫又拍雲網域名稱,如自動判斷最優線路http://v0.api.upyun.com或電信網通線路http://v1.api.upyun.com或聯通網通線路http://v2.api.upyun.com或移動鐵通線路http://v3.api.upyun.com。如果srcType設定為
cos,則填寫騰訊雲bucket所在的地區,例如華南園區為ap-guangzhou。如果srcType設定為
azure,則填寫Azure Blob連接字串中的EndpointSuffix ,如core.chinacloudapi.cn。
srcBucket
源bucket名字或container名稱
如果srcType設定為
local、http,則不需要填寫。如果srcType設定為
azure,則填寫container名稱。其他填寫bucket名稱。
srcPrefix
源首碼,字串,預設為空白
如果srcType設定為local,則填寫本地目錄,需要完整路徑,以單個正斜線(/)進行分割並且以單個正斜線(/)結尾,僅支援如
c:/example/或者/data/example/的格式。重要c:/example//或 /data//example/ 或 /data/example//是非法的。
如果srcType設定為
oss、qiniu、bos、ks3、youpai、s3,則填寫待同步object的首碼,不包括bucket名稱,如data/to/oss/。如需同步所有檔案,則srcPrefix設定為空白 。
destAccessKey
目的AccessKey,字串。
訪問OSS服務的AccessKey ID,請到阿里雲控制台查看。
destSecretKey
目的SecretKey,字串。
訪問OSS的AccessKey Secret,請到阿里雲控制台查看。
destDomain
目的endpoint,字串。
從阿里雲控制台擷取,非帶bucket首碼的次層網域,列表請參見網域名稱列表。
destBucket
目的bucket,字串。
OSS的bucket名稱,不需要以/結尾。
destPrefix
目標首碼,字串,預設為空白。
目標首碼,預設為空白,直接放在目標bucket下。
如果要將資料同步到
oss的某個目錄下,請以/結尾,如data/in/oss/。注意
oss不支援以/作為檔案的開頭,所以destPrefix請不要配置以/作為開頭。一個本地檔案路徑為srcPrefix+relativePath的檔案,遷移到
oss的路徑為destDomain/destBucket/destPrefix +relativePath。一個雲端檔案路徑為srcDomain/srcBucket/srcPrefix+relativePath的檔案,遷移到
oss的路徑為destDomain/destBucket/destPrefix+relativePath。
taskObjectCountLimit
每個Task最大的檔案數,整型,預設10000。
該配置項會影響到任務執行的並行度,一般配置為總檔案數/Worker總數/遷移線程數(workerTaskThreadNum) ,最大值不要超過50000,如果不知道總檔案數,請使用預設值。
taskObjectSizeLimit
每個Task最巨量資料量,整型,單位bytes,預設1GB。
該配置項會影響到任務執行的並行度,一般配置為總資料量/Worker總數/遷移線程數(workerTaskThreadNum),如果不知道總資料量,請使用預設值。
isSkipExistFile
資料移轉時是否跳過已經存在的檔案,布爾類型。
當設定為true時,根據檔案的size和LastModifiedTime判斷是否跳過;為false時,總是覆蓋OSS上已有檔案。預設為值為false。
scanThreadCount
並行掃描檔案的線程數,整型。
預設值:1
有效值:1-32
該配置項與掃描檔案的效率有關,沒有特殊需求請不要修改。
maxMultiThreadScanDepth
最大允許並行掃描目錄的深度,整型。
預設值:1
有效值:1-16
預設值1表示在頂級目錄間並行掃描。
沒有特殊需求不要修改,隨意配置過大值會導致任務無法正常運行 。
appId
騰訊雲COS的appId ,整型。
srcType=cos時有效。
httpListFilePath
HTTP列表檔案的絕對路徑,字串。
srcType=http時有效,源為HTTP連結地址時,需要提供內容為HTTP連結地址檔案的絕對路徑,如c:/example/http.list。
該檔案中的HTTP連結需要劃分成兩列,以一個或多個空格分開,分別代表首碼和上傳到OSS後的相對路徑。例如c:/example/http.list檔案內容如:
http://xxx.xxx.com/aa/ bb.jpg http://xxx.xxx.com/cc/ dd.jpg指定destPrefix為ee/,則遷移到OSS的檔案名稱如下:
ee/bb.jpg ee/dd.jpg
workers:分布式模式特有,每個IP一行。如:
192.168.1.6 192.168.1.7 192.168.1.8上述配置情況下,第一行的
192.168.1.6一定是 master ;即192.168.1.6上會同時啟動Master 、 Worker、TaskTracker。Console也需要在該機上運行。多個Worker機器的使用者名稱、登入方式、工作目錄請確保相同。
設定檔樣本
下表中是分布式部署下的資料移轉任務設定檔,單機的設定檔名是local_job.cfg,配置項與分布式部署時沒有區別。
遷移類型 | 設定檔 | 說明 |
從本地遷移到OSS | srcPrefix是以正斜線(/)結尾的絕對路徑,如 | |
從七牛雲端儲存遷移到OSS | srcPrefix和destPrefix可以配置為空白;如果不為空白,請以正斜線(/)結尾,如 | |
從百度bos遷移到OSS | srcPrefix和destPrefix可以配置為空白;如果不為空白,請以正斜線(/)結尾,如 | |
從Amazon S3遷移到OSS | 參見S3網域名稱列表。 | |
從又拍雲端儲存遷移到OSS | srcAccessKey/srcSecretKey填操作員帳號及密碼。 | |
從騰訊cos遷移到OSS | srcDomain請按照V4版本填寫,如 | |
從Azure blob遷移到OSS | srcAccessKey/srcSecretKey填寫儲存帳號及密鑰。srcDomain填連接字串中的 EndpointSuffix,如 | |
從OSS遷移到OSS | 適用於不同地區之間、不同儲存類型之間、不同首碼之間的資料移轉。推薦在ECS上部署,並使用帶internal的網域名稱,可以節省流量費用。 |
進階設定
分時限流
sys.properties中的workerMaxThroughput(KB/s)表示Worker流量的上限,如果業務需要限流,例如源端流控控制、網路限制等情況。該參數的值應該小於機器的最大網路流量,並根據業務需要評估。修改後需要重啟服務才會生效。
分布式部署情況下,需要修改每個Worker的$OSS_IMPORT_WORK_DIR/conf下的sys.properties,然後重啟服務。
要實現分時限流,可通過crontab定時修改sys.properties,然後重啟服務生效。
修改任務並發數
sys.properties中的workerTaskThreadNum表示Worker並發執行的任務數量,如果網路較差、並發大,會出現大量逾時錯誤,此時應該修改此配置,降低並發量,並重啟服務。
sys.properties中的workerMaxThroughput(KB/s)表示Worker流量的上限,如果業務需要限流,例如源端流控控制、網路限制等情況。該參數的值應該小於機器的最大網路流量,並根據業務需要評估。
job.cfg中的taskObjectCountLimit ,每個Task 最大的檔案數,預設10000。該參數會影響Task的數量,數量過小無法實現有效並發。
job.cfg中的taskObjectSizeLimit , 每個Task最巨量資料量,預設1GB。該參數會影響Task的數量,數量過小無法實現有效並發。
重要請在啟動遷移任務前,完成各項參數配置。
sys.properties中的參數修改後,重啟遷移伺服器後才會生效。
job.cfg任務提交後,任務的配置參數無法更改。
只校正不遷移資料
ossimport支援只校正資料不遷移資料,設定任務設定檔job.cfg或local_job.cfg的配置項jobType為audit而不是import,其他配置與資料移轉相同。
資料移轉增量模式
資料移轉增量模式,是指資料移轉任務啟動後,先進行一次全量遷移,每隔一段時間自動的進行增量資料移轉。第一次資料移轉任務為全量遷移,提交任務後立即啟動;後面的增量資料移轉每隔一個周期啟動一次。資料移轉增量模式適用於資料備份和資料同步。
增量模式有兩個配置項:
job.cfg中的isIncremental ,表示是否開啟增量移轉模式, true表示開啟增量模式,false表示關閉增量模式,預設關閉。
job.cfg中的incrementalModeInterval,表示增量模式下的同步間隔,即增量資料移轉的間隔周期,單位秒。
isIncremental=true時有效。可配置的最小值為900秒,不建議配置成小於3600秒的值,會浪費大量請求,造成額外的系統開銷。
指定遷移檔案的過濾條件
遷移檔案的過濾條件,即只遷移滿足特定條件的檔案。ossimport支援指定首碼和最後修改時間:
job.cfg中的srcPrefix,用來指定遷移檔案的首碼,預設為空白。
如果
srcType=local,則填寫本地目錄。填寫時需要完整路徑,以正斜線(/)進行分割並且以正斜線(/)結尾,如c:/example/或/data/example/。如果
srcType為oss、qiniu、bos、ks3、youpai、s3,則為待同步object的首碼,不包括bucket名稱。如data/to/oss/。遷移所有檔案時srcPrefix設定為空白。
job.cfg中的importSince,用來指定遷移檔案的最後修改時間,單位秒。importSince為Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s擷取。預設值0,表示遷移全部資料。增量模式下只對第一次全量遷移有效,非增量模式對整個遷移任務有效。
如果檔案的
LastModified Time在importSince之前,檔案不被遷移。如果檔案的
LastModified Time在importSince之後,檔案將被遷移。