OssImport係列之一——架構
概述
OssImport工具可以將本地、其它雲存儲的數據遷移到OSS,它有以下特點:
- 支持的豐富的數據源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍雲、騰訊雲COS、金山KS3、HTTP、OSS等,並可根據需要擴展;
- 支持斷點續傳;
- 支持流量控製;
- 支持遷移指定時間後的文件、特定前綴的文件;
- 支持並行數據下載、上傳;
- 支持單機模式和分布式模式,單機模式部署簡單使用方便,分布式模式適合大規模數據遷移。
架構
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*中配置。 |
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*。 |
部署方式
OssImport有 單機模式 和 分布式模式 兩種部署方式。對於小於 1TB 的小規模數據數據遷移,單機模式即可完成。對於大規模的數據遷移,請使用分布式模式。
單機
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* 的同級目錄。
分布式
分布式模式下可以啟動多個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,Windowns暫不支持。
配置文件
單機模式下有兩個配置文件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 | public key文件路徑 | 如果已經打通了ssh通道,則可以指定public key文件路徑,否則為空。如果配置了privateKeyFile,則優先使用privateKeyFile;如果沒有配置privateKeyFile,則使用workerUser/workerPassword。 單機模式不需要修改此項。 |
sshPort | ssh端口 | 默認22,一般情況無需更改 單機模式不需要修改此項。 |
workerTaskThreadNum | Worker執行Task的最大線程數 | 該參數跟內存等機器配置有關,建議物理機不要超過60,虛擬機不超過30。 |
workerMaxThroughput(KB/s) | worker數據遷移的流量上限 | 該值能起到限流作用,默認0表示不限流。 |
dispatcherThreadNum | Tracker的Task分發與狀態確認的線程數 | 默認值一般夠用,沒有特殊需要請不要修改默認值。 |
workerAbortWhenUncatchedException | 表示遇到未知錯誤時是跳過還是Abort | 默認逃過 |
workerRecordMd5 | Task數據遷移時是否進行MD5校驗 | 默認不校驗,默認上傳時會進行CRC校驗,沒有極強的數據安全性不建議打開。 |
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域名,如https://bj.bcebos.com 或 https://gz.bcebos.com ;ks3 ,金山ks3域名,如https://kss.ksyun.com 或 https://ks3-cn-beijing.ksyun.com 或 https://ks3-us-west-1.ksyun.com ;s3 , AWS S3各*region*的域名請參考S3 Endpoint;youpai ,又拍雲域名,如自動判斷最優線路https://v0.api.upyun.com 或電信線路https://v1.api.upyun.com 或聯通網通線路https://v2.api.upyun.com 或移動鐵通線路https://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) ,如果不知道總文件數,請使用默認值。 |
taskObjectSizeLimit | 每個*Task*最大數據量,整型,單位bytes,默認1GB | 該配置項會影響到任務執行的並行度,一般配置為 總數據量/Worker總數/遷移線程數(workerTaskThreadNum) ,如果不知道總數據量,請使用默認值。 |
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 文件內容有127.0.0.1/aa/ bb.jpg 127.0.0.1/ cc/dd.jpg 兩行,遷移到OSS的路徑分別是 destDomain/destBucket/destPrefix + bb.jpg 和 destDomain/destBucket/destPrefix + cc/dd.jpg
|
workers
workers是分布式模式先獨有的,每個IP一行,如:
192.168.1.6
192.168.1.7
192.168.1.8
提示:
- 上述配置情況下,
192.168.1.6
上會啟動*Master*、*Worker*、*TaskTracker*,*Console*也需要在該機上執行。 - 多個*Worker*機器的用戶名、登錄方式、工作目錄請確保相同。
運行環境
- Java 1.7及以上
最後更新:2017-07-12 11:02:19
上一篇:
OssImport係列之二——單機部署
下一篇:
阿裏雲入選 Gartner 2017年全球雲基礎設施即服務魔力象限
Nodejs+Extjs+Mongodb開發第一天 Nodejs環境搭建
java.util.concurrent包(3)——線程間通信wait/notify和await/signal
應用性能管理(APM, Application Performance Management)總結
Android Studio 提供更強大可視化編程
HDU 1698 線段樹成段更新
SimpleDateFormat嚴格限製日期轉換setLenient(false)
SQL Server DATEADD() 函數
《Docker生產環境實踐指南》——2.6 編排
文本文件和二進製文件
《數字視頻和高清:算法和接口》一2.4圖像獲取