本文介紹如何分布式部署ossimport,分布式部署目前只支援Linux系統,Windows系統暫不支援。
前提條件
請選擇至少兩台機器作為遷移叢集,其中一台作為Master,其餘的作為Worker。
請確保網路連接正常,以便Master與Worker之間通過SSH串連。
請確保所有Worker的使用者名稱和密碼一致。
說明Master與Worker之間需要SSH串連或者在sys.properties配置Worker登入資訊。
下載並安裝ossimport
下載ossimport
分布式版本下載地址ossimport-2.3.7.tar.gz,將ossimport安裝包下載到本地。
安裝ossimport
說明選擇一台機器作為Master,後續的操作都在Master上執行。
登入伺服器後執行以下命令 ,建立ossimport目錄。
mkdir -p $HOME/ossimport
進入壓縮包目前的目錄,執行以下命令 ,將壓縮包解壓到指定目錄。
tar -zxvf ossimport-2.3.7.tar.gz -C $HOME/ossimport
解壓後的檔案結構如下:
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 # 說明文檔,使用前請仔細閱讀
OSS_IMPORT_HOME:ossimport的根目錄,預設為解壓命令中的目錄
$HOME/ossimport
,也可以通過命令export OSS_IMPORT_HOME=<dir>
或修改系統設定檔$HOME/.bashrc
設定,推薦使用預設目錄;OSS_IMPORT_WORK_DIR:ossimport的工作目錄,通過
conf/sys.properties
的配置項workingDir
指定,推薦為$HOME/ossimport/workdir
;OSS_IMPORT_HOME或OSS_IMPORT_WORK_DIR請使用絕對路徑配置,如
/home/<user>/ossimport
或/home/<user>/ossimport/workdir
。
配置
分布式部署有三個設定檔conf/sys.properties
、conf/job.cfg
、conf/workers
。
conf/job.cfg
:分布式模式下任務的設定檔範本,資料移轉前請按照實際參數修改。conf/sys.properties
:系統運行參數設定檔,如工作目錄、Worker運行參數等請在該檔案中配置。conf/workers
:worker列表。
請在提交任務前確認
sys.properties
和job.cfg
中的參數,任務提交後參數無法再修改。Worker列表
workers
請啟動服務前確定,啟動後無法再增加或刪除。
運行
執行遷移任務
分布式部署時,執行任務的一般步驟是修改任務設定檔、部署服務、清除同名任務、提交任務、啟動遷移服務、查看任務狀態、重試失敗子任務以及停止遷移任務。詳細說明如下:
部署服務。在Linux終端執行bash console.sh deploy。該命令會根據使用者配置的conf/workers,將ossimport部署到所有機器上。
說明部署前請保證設定檔conf/job.cfg、conf/workers已經修改完成。
清除同名任務。如果運行過同名任務,需要重新執行任務,請先清除同名任務。如果沒有運行過,或需要重試失敗子任務,不需要執行清除命令。Linux終端中執行
bash console.sh clean job_name
。提交資料移轉任務。OssImport不能重複提交同名任務,如果有請使用
clean
命令清除。提交任務需要指定任務的設定檔,任務的設定檔範本在conf/job.cfg
,建議在模板的基礎上修改。在Linux終端執行bash console.sh submit [job_cfg_file]
,提交設定檔為job_cfg_file 的任務,job_cfg_file
為選擇性參數,不指定時預設為$OSS_IMPORT_HOME/conf/job.cfg
,$OSS_IMPORT_HOME
預設為console.sh
所在的目錄。啟動服務。Linux終端執行
bash console.sh start
。查看任務狀態。Linux終端執行
bash console.sh stat
。失敗任務重試。由於網路或其它原因,任務可能運行失敗。失敗重試只重試失敗的任務,成功的任務不會重試。Linux下在終端執行
bash console.sh retry [job_name]
,job_name 為選擇性參數,指定job_name
時重試失敗任務的子任務,不指定job_name
時重試所有任務的失敗子任務。停止服務。Linux終端執行
bash console.sh stop
。
提示:
bash console.sh
在參數錯誤時,會自動提示命令格式。設定檔和提交任務中的目錄,推薦使用絕對目錄。
任務的配置,即
job.cfg
中的配置項。重要配置項提交後不允許修改。
常見任務失敗原因
上傳過程中來源目錄的檔案發生了修改,
log/audit.log
裡會提示SIZE_NOT_MATCH
相關字樣的錯誤,這種情況下老的檔案已經上傳成功,新的修改沒有上傳到OSS;源檔案在上傳過程中被刪除,導致下載的時候失敗;
源檔案名稱不符合OSS命名規範(不能以/開頭,不可為空),導致上傳到OSS失敗;
下載資料來源檔案失敗;
程式異常退出,任務狀態為Abort,這種情況請聯絡我們。
任務狀態及日誌
任務提交後,Master分解成Task,有Worker執行Task,Tracker收集Task狀態。任務運行完成後workdir目錄內容如下:
workdir ├── 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列表 ├── logs │ ├── import.log # 遷移日誌 │ ├── master.log # Master日誌 │ ├── tracker.log # Tracker日誌 │ └── worker.log # Worker日誌 ├── master │ ├── jobqueue # 存放尚未分解完成的任務 │ └── jobs # 存放任務運行狀態 │ └── xxtooss # 任務名稱 │ ├── checkpoints # Master分解Job到Task的checkpoint點記錄 │ │ └── 0 │ │ └── ED09636A6EA24A292460866AFDD7A89A.cpt │ ├── dispatched # 已經分配給Worker尚未運行完成的Task │ │ └── 192.168.1.6 │ ├── failed_tasks # 運行失敗的Task │ │ └── A41506C07BF1DF2A3EDB4CE31756B93F_1499348973217@192.168.1.6 │ │ ├── audit.log # Task作業記錄,通過該日誌可以查看錯誤原因 │ │ ├── DONE # Task運行成功標誌,失敗為空白 │ │ ├── error.list # Task錯誤清單,可以查看錯誤檔案清單 │ │ ├── STATUS # 任務狀態標誌檔案,內容為Failed或Completed,表示子任務失敗或成功 │ │ └── TASK # Task描述資訊 │ ├── pending_tasks # 尚未分配的Task │ └── succeed_tasks # 成功啟動並執行Task │ └── A41506C07BF1DF2A3EDB4CE31756B93F_1499668462358@192.168.1.6 │ ├── audit.log # Task作業記錄,通過該日誌可以查看錯誤原因 │ ├── DONE # Task運行成功標誌 │ ├── error.list # Task錯誤清單,成功為空白 │ ├── STATUS # 任務狀態標誌檔案,內容為Failed或Completed,表示子任務失敗或成功 │ └── TASK # Task描述資訊 └── worker # Worker正在啟動並執行Task狀態,運行完成後由Master管理 └── jobs ├── local_test2 │ └── tasks └── local_test_4 └── tasks
重要Job運行資訊,可以查看
logs/import.log
。Task的失敗原因,可以查看
master/jobs/${JobName}/failed_tasks/${TaskName}/audit.log
。Task的失敗檔案,可以查看
master/jobs/${JobName}/failed_tasks/${TaskName}/error.list
。上述日誌僅作為排查問題時的參考,您的業務和應用不要依賴於該內容。
遷移結果校正
ossimport不對遷移檔案進行校正,無法保證遷移結果的正確性和一致性。在遷移任務完成後,請您務必自行做好源端和目的端資料的一致性校正。
如您在未校正源端和目的端資料一致性前,刪除來源資料,由此所引起的一切損失和後果均由您自行承擔。
常見錯誤及排除
請查看常見錯誤及排除。