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
之後,檔案將被遷移。