概述

OssImport工具可以將本地、其它雲端儲存的資料移轉到OSS,它有以下特點:

  • 支援的豐富的資料來源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍雲、騰訊雲COS、金山KS3、HTTP、OSS等,並可根據需要擴充;
  • 支援斷點續傳;
  • 支援流量控制;
  • 支援遷移指定時間後的檔案、特定首碼的檔案;
  • 支援並行數據下載、上傳;
  • 支援單機模式和分布式模式,單機模式部署簡單使用方便,分布式模式適合大規模資料移轉。

運行環境

  • Java 1.7及以上

部署方式

OssImport有單機模式和分布式模式兩種部署方式。

  • 對於小於 30TB 的小規模資料移轉,單機模式即可完成。下載地址
  • 對於大規模的資料移轉,請使用分布式模式。下載地址
單機

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的詳細過程是:
  1. Master從本地/其它雲端儲存中遍曆出完整的待遷移的檔案清單。
  2. 按照數據大小和檔案個數把完整的檔案清單切分成Task,每個Task負責部分檔案的遷移或校驗。
Worker
  • 負責Task的檔案遷移和數據校驗,從資料來源上拉取指定檔案,並上傳到OSS的指定目錄。遷移的資料來源和OSS的配置在job.cfg或local_job.cfg中指定
  • Worker資料移轉支援限流、指定Task並發數,在sys.properties中配置。
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.propertieslocal_job.cfg,分布式模式下有三個設定檔sys.propertieslocal_job.cfgworkers。其中local_job.cfgjob.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.comhttp://gz.bcebos.com
    • ks3,金山ks3網域名稱,如http://kss.ksyun.comhttp://ks3-cn-beijing.ksyun.comhttp://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技術服務人員