全部產品
Search
文件中心

Data Online Migration:ossimport概述

更新時間:Oct 25, 2024

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的詳細過程如下:

  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。

Job

使用者提交的資料移轉任務,對使用者來說一個任務對應一個設定檔job.cfg

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.propertieslocal_job.cfg,分布式模式下有三個設定檔sys.propertiesjob.cfgworkers。其中local_job.cfgjob.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.cfgjob.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設定為ossqiniubaiduks3s3,則填寫資料來源的AccessKey。

    • 如果srcType設定為localhttp,則該項不需要填寫。

    • 如果srcType設定為youpaiazure,則填寫使用者名稱AccountName。

    srcSecretKey

    源SecretKey,字串。

    • 如果srcType設定為ossqiniubaiduks3s3,則填寫資料來源的 SecretKey。

    • 如果srcType設定為localhttp,則該項不需要填寫。

    • 如果srcType設定為youpai,則填寫操作員密碼。

    • 如果srcType設定為azure,則填寫AccountKey。

    srcDomain

    源Endpoint

    • 如果srcType設定為localhttp,則該項不需要填寫。

    • 如果srcType設定為oss,則填寫從控制台擷取的網域名稱,非帶bucket首碼的次層網域。

    • 如果srcType設定為qiniu,則填寫從七牛控制台擷取的對應bucket的網域名稱。

    • 如果srcType設定為bos,則填寫百度BOS網域名稱,如http://bj.bcebos.comhttp://gz.bcebos.com

    • 如果srcType設定為ks3,則填寫金山ks3網域名稱,如http://kss.ksyun.comhttp://ks3-cn-beijing.ksyun.comhttp://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設定為 localhttp,則不需要填寫。

    • 如果srcType設定為azure,則填寫container名稱。

    • 其他填寫bucket名稱。

    srcPrefix

    源首碼,字串,預設為空白

    • 如果srcType設定為local,則填寫本地目錄,需要完整路徑,以單個正斜線(/)進行分割並且以單個正斜線(/)結尾,僅支援如c:/example/ 或者/data/example/ 的格式。

      重要

      c:/example//或 /data//example/ 或 /data/example//是非法的。

    • 如果srcType設定為ossqiniubosks3youpais3,則填寫待同步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

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/

Amazon 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的網域名稱,可以節省流量費用。

進階設定

  • 分時限流

    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.cfglocal_job.cfg的配置項jobTypeaudit而不是import,其他配置與資料移轉相同。

  • 資料移轉增量模式

    資料移轉增量模式,是指資料移轉任務啟動後,先進行一次全量遷移,每隔一段時間自動的進行增量資料移轉。第一次資料移轉任務為全量遷移,提交任務後立即啟動;後面的增量資料移轉每隔一個周期啟動一次。資料移轉增量模式適用於資料備份和資料同步。

    增量模式有兩個配置項:

    • job.cfg中的isIncremental ,表示是否開啟增量移轉模式, true表示開啟增量模式,false表示關閉增量模式,預設關閉。

    • job.cfg中的incrementalModeInterval,表示增量模式下的同步間隔,即增量資料移轉的間隔周期,單位秒。isIncremental=true時有效。可配置的最小值為900秒 ,不建議配置成小於3600秒的值,會浪費大量請求,造成額外的系統開銷。

  • 指定遷移檔案的過濾條件

    遷移檔案的過濾條件,即只遷移滿足特定條件的檔案。ossimport支援指定首碼和最後修改時間:

    • job.cfg中的srcPrefix,用來指定遷移檔案的首碼,預設為空白。

      • 如果srcType=local,則填寫本地目錄。填寫時需要完整路徑,以正斜線(/)進行分割並且以正斜線(/)結尾,如c:/example//data/example/

      • 如果srcTypeossqiniubosks3youpais3,則為待同步object的首碼,不包括bucket名稱。如data/to/oss/。遷移所有檔案時srcPrefix設定為空白。

    • job.cfg中的importSince,用來指定遷移檔案的最後修改時間,單位秒。importSince為Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s擷取。預設值0,表示遷移全部資料。增量模式下只對第一次全量遷移有效,非增量模式對整個遷移任務有效。

      • 如果檔案的LastModified TimeimportSince之前,檔案不被遷移。

      • 如果檔案的LastModified TimeimportSince之後,檔案將被遷移。