概述
OssImport工具可以將本地、其它雲端儲存的資料移轉到OSS,它有以下特點:
- 支援的豐富的資料來源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍雲、騰訊雲COS、金山KS3、HTTP、OSS等,並可根據需要擴充;
- 支援斷點續傳;
- 支援流量控制;
- 支援遷移指定時間後的檔案、特定首碼的檔案;
- 支援並行數據下載、上傳;
- 支援單機模式和分布式模式,單機模式部署簡單使用方便,分布式模式適合大規模資料移轉。
運行環境
- Java 1.7及以上
部署方式
OssImport有單機模式和分布式模式兩種部署方式。
Master、Worker、Tracker、Console運行在一個機器上,系統中有且只有一個Worker。我們對單機模式的部署和執行進行了封裝優化,單機部署和執行都很簡單。單機模式下Master、Worker、TaskTracker、Console四個模組統一打包成ossimport2.jar
。
單機模式下檔案結構如下:
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
其中:
- Job:用戶通過提交的資料移轉任務,對用戶來說一個任務對應一個設定檔
job.cfg
。 - Task:Job按照數據大小和檔案個數 可以分成多個Task ,每個Task 遷移部分檔案。Job切分成Task的最小單位是檔案,同一個檔案不會切分到多個Task中。
OssImport各模組說明,如下表:
角色 | 說明 |
---|---|
Master | 負責將Job切分成Task,按照數據大小和檔案個數分解成Task,數據大小/檔案個數可以在sys.properties中配置。Job切分成Task的詳細過程是:
|
Worker |
|
TaskTracker | 簡稱Tracker,負責Task的分發、Task狀態跟蹤。 |
Console | 負責與用戶互動,接受命令顯示結果。支援系統管理命令deploy/start/stop,Job管理命令 submit/retry/clean。 |
分布式模式下可以啟動多個Worker執行遷移數據,Task平均分配到Worker上執行,一個Worker執行多個Task。每一個機器上只能啟動一個Worker。workers
配置的第一個Worker 上會同時啟動Master 、 TaskTracker、Console 也要在該機器上運行。
分布式模式下檔案結構如下:
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 # 說明文檔,強烈建議使用前仔細閱讀
提示:
- 分布式命令列工具 console.sh 目前只支援Linux,Windows暫不支援。
設定檔
單機模式下有兩個設定檔sys.properties
、local_job.cfg
,分布式模式下有三個設定檔sys.properties
、local_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通道,則可以指定public key檔案路徑,否則為空。
- 如果配置了privateKeyFile,則優先使用privateKeyFile。
- 如果沒有配置privateKeyFile,則使用workerUser/workerPassword。
- 單機模式不需要修改此項。
sshPort ssh通信埠 預設22,一般情況無需更改 單機模式不需要修改此項。 workerTaskThreadNum Worker執行Task的最大線程數 - 該參數與機器的記憶體/網路有關,建議值60 。
- 物理機可以適當加大,比如150 ,如果網路已經打滿,請不要再加大。
- 如果網路較差,請適當降低,比如30,防止請求競爭網路造成大量請求逾時。
workerMaxThroughput(KB/s) worker資料移轉的資料傳輸量上限 該值能起到限流作用,預設0表示不限流。 dispatcherThreadNum Tracker的Task分發與狀態確認的線程數 預設值一般夠用,沒有特殊需要請不要修改預設值。 workerAbortWhenUncatchedException 表示遇到未知錯誤時是跳過還是Abort 預設跳過。 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或audit,預設 import。 - import,執行資料移轉操作並校驗遷移數據的一致性。
- audit,僅進行數據一致性校驗。
isIncremental 是否開啟增量移轉模式,布爾類型。 - 預設值false。
- 如果設為true,會每間隔incrementalModeInterval(單位秒)重新掃描一次增量數據,並將增量資料移轉到OSS。
incrementalModeInterval 增量模式下的同步間隔,整形,單位秒。 isIncremental=true時有效。可配置的最小間隔為900秒,不建議配置成小於 3600秒 的值,會浪費大量請求,造成額外的系統開銷。 importSince 遷移大於該時間的數據,整形,單位秒。 - 該時間為 Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s獲取。
- 預設為0,表示遷移全部數據。
srcType 同步源類型,字元串, 請注意大小寫。 目前支援local、oss、qiniu、bos、ks3、s3、youpai、http、cos、azure等十種類型。 - local,從本地檔案遷移數據到OSS,該選項只需要填寫srcPrefix, 不需要填寫srcAccessKey,srcSecretKey,srcDomain,srcBucket。
- oss,從一個 bucket 遷移到另一個 bucket。
- qiniu,從七牛雲端儲存遷移到OSS。
- bos,從百度的雲端儲存遷移到OSS。
- ks3,從金山雲端儲存遷移到OSS。
- s3,從 AWS S3 遷移到OSS。
- youpai,從又拍雲遷移到到OSS。
- http,通過提供的HTTP連結清單遷移數據到OSS。
- cos,從騰訊雲端儲存COS遷移到OSS。
- azure,從Azuer Blob遷移到OSS。
srcAccessKey 源AccessKey,字元串。 如果srcType設定為oss、qiniu、baidu、ks3、s3,填寫資料來源的AccessKey。 - local、http,該項不需要填寫。
- youpai、azure則填寫用戶名AccountName。
srcSecretKey 源SecretKey,字元串。 如果 srcType 設定為oss、qiniu、baidu、ks3、s3,填寫資料來源的 SecretKey。 - local、http,該項不需要填寫。
- youpai,填寫操作員密碼。
- azure,填寫AccountKey。
srcDomain 源Endpoint 如果 srcType 設定為local、http,該配置項不需要填。 - oss,從控制台獲取的網域名稱,非帶bucket首碼的次層網域,列表請參看網域名稱列表。
- qiniu,從七牛控制台獲取的對應bucket的網域名稱。
- bos,百度BOS網域名稱,如
http://bj.bcebos.com
或http://gz.bcebos.com
。 - ks3,金山ks3網域名稱,如
http://kss.ksyun.com
或http://ks3-cn-beijing.ksyun.com
或http://ks3-us-west-1.ksyun.coms
。 - S3, AWS S3各 region 的網域名稱請參考S3 Endpoint。
- youpai,又拍雲網域名稱,如自動判斷最優線路
http://v0.api.upyun.com
或電信線路http://v1.api.upyun.com
或聯通網通線路http://v2.api.upyun.com
或移動鐵通線路http://v3.api.upyun.com
。 - cos,騰訊雲填寫bucket所在的區域,比如華南園區:gz、華北園區:tj、華東園區:sh。
- azure,Azure Blob連接字串中的 EndpointSuffix ,如core.chinacloudapi.cn。
srcBucket 源bucket名字或container名稱。 如果 srcType 設定為local、http,不需要填寫。azure,Azure Blob填寫container名稱,其它填寫bucket名稱。 srcPrefix 源首碼,字元串,預設為空。 如果srcType=local,填寫本地目錄,需要完整路徑,以/進行分割並且以/結尾,如 c:/example/或 /data/example/。srcType 為oss、qiniu、bos、ks3、youpai、s3,則為待同步object的首碼,不包括bucket名稱,如data/to/oss/, 同步所有檔案srcPrefix設定為空 。 destAccessKey 目的AccessKey,字元串。 OSS的AccessKeyID,請到阿里雲控制台查看
。destSecretKey 目的SecretKey,字元串。 OSS的AccessKeySecret,請到阿里雲控制台查看
。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。jobType為audit時此項不生效。 scanThreadCount 並行掃描檔案的線程數,整型,預設1。 該配置項與掃描檔案的效率有關,沒有特殊需求請不要修改。 maxMultiThreadScanDepth 最大允許並行掃描目錄的深度,整型,預設1。 - 預設值1表示在頂級目錄間並行掃描。
- 沒有特殊需求不要修改,隨意配置過大值會導致任務無法正常運行 。
appId 騰訊雲COS的appId ,整型。 srcType=cos時有效。 httpListFilePath HTTP列表檔案的絕對路徑,字元串。 - srcType=http時有效,源為HTTP連結地址時,需要提供內容為HTTP連結地址檔案的絕對路徑,如c:/example/http.list。
- 該檔案中的HTTP連結需要劃分成兩列,以空格分開,分別代表首碼和上傳到OSS後的相對路徑。例如c:/example/http.list檔案內容如:
http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/aa/ bb.jpg
http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/cc/dd.jpg
兩行,遷移到OSS的檔案名分別是 destPrefix + bb.jpg和 destPrefix + cc/dd.jpg。
- workers
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 | job.cfg | srcPrefix 是以 / 結尾的絕對路徑,如 D:/work/oss/data/ , /home/user/work/oss/data/ |
從七牛雲端儲存遷移到OSS | job.cfg | srcPrefix 和 destPrefix 可以配置為空;如果不為空,請以 / 結尾,如 destPrefix=docs/ |
從百度bos遷移到OSS | job.cfg | srcPrefix 和 destPrefix 可以配置為空;如果不為空,請以 / 結尾,如 destPrefix=docs/ |
從AWS S3遷移到OSS | job.cfg | S3的網域名稱列表 |
從又拍雲端儲存遷移到OSS | job.cfg | srcAccessKey/srcSecretKey填操作員帳號及密碼 |
從騰訊cos遷移到OSS | job.cfg | srcDomain請按照V4版本填寫,如srcDomain=sh ; srcPrefix可以為空,當不為空時候,請以 / 開頭和結尾,如srcPrefix=/docs/ |
從Azure blob遷移到OSS | job.cfg | srcAccessKey/srcSecretKey填儲存儲存帳號及密鑰;srcDomain填連接字串中的 EndpointSuffix,如core.chinacloudapi.cn |
從OSS遷移到OSS | job.cfg | 適用於不同區域之間、不同儲存類型之間、不同首碼之間的資料移轉;推薦在ECS上部署,並使用帶internal的網域名稱,可以節省流量費用 |
使用Express Connect遷移數據到OSS | job.cfg | 適用於所有資料來源,如果您有高速遷移需求,請提交工單或聯繫OSS技術服務人員 |