摘要: 乍一看標題會覺得是否是做者寫錯了怎麼會有從MaxCompute到MaxCompute遷移數據的場景呢在實際使用中已經有客戶遇到了這種場景好比兩個網絡互通的專有云環境之間數據遷移、公共雲數加DataIDE上兩個雲帳號之間數據遷移、還有網絡不通的兩個MaxCompute項目數據遷移等等下面咱們逐個場景介紹。html
免費開通大數據服務:https://www.aliyun.com/product/odpspython
乍一看標題會覺得是否是做者寫錯了,怎麼會有從MaxCompute到MaxCompute遷移數據的場景呢?在實際使用中已經有客戶遇到了這種場景,好比:兩個網絡互通的專有云環境之間數據遷移、公共雲數加DataIDE上兩個雲帳號之間數據遷移、還有網絡不通的兩個MaxCompute項目數據遷移等等,下面咱們逐個場景介紹。json
場景一:兩個網絡互通的專有云MaxCompute環境之間數據遷移網絡
這種場景須要先從源MaxCompute中導出元數據DDL,在目標MaxCompute中初始化表,而後藉助DataX工具完成數據遷移,步驟以下:工具
1.安裝配置ODPS客戶端
https://help.aliyun.com/document_detail/27804.html測試
2.安裝配置Datax客戶端
下載DataX工具包,下載後解壓至本地某個目錄,修改權限爲755,進入bin目錄,便可運行樣例同步做業:大數據
$ tar zxvf datax.tar.gz $ sudo chmod -R 755 {YOUR_DATAX_HOME} $ cd {YOUR_DATAX_HOME}/bin $ python datax.py ../job/job.json
3.表結構遷移3d
3.1 從ODPS中導出某個表的建表語句,可用來測試數據同步。日誌
export table table_name;
DDL:create table IF NOT EXISTS ` date_timestame ` (`id` datetime comment "") partitioned by(pt string comment ""); alter table ` date_timestame ` add IF NOT EXISTS partition(dt='20161001'); alter table ` date_timestame ` add IF NOT EXISTS partition(dt='20161101'); alter table ` date_timestame ` add IF NOT EXISTS partition(dt='20161201'); alter table ` date_timestame ` add IF NOT EXISTS partition(dt='20170101');
3.2 從ODPS批量導出建表語句。code
export <projectname> <local_path>;
3.3 將建表語句在目標ODPS的project下執行,便可完成表結構建立。
4.數據遷移
從源ODPS讀取數據寫入到目標ODPS,先按照「表結構遷移」在目標ODPS建立一個表,作DataX數據同步驗證。
4.1 、建立做業的配置文件(json格式)
能夠經過命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
odps2odps.json樣例(填寫相關參數,odpsServer/ tunnelServer要改爲源/目標ODPS配置):
{ "job": { "setting": { "speed": { "channel": 1 } }, "content": [ { "reader": { "name": "odpsreader", "parameter": { "accessId": "${srcAccessId}", "accessKey": "${srcAccessKey}", "project": "${srcProject}", "table": "${srcTable}", "partition": ["pt=${srcPartition}"], "column": [ "*" ], "odpsServer": "http://service.odpsstg.aliyun-inc.com/stgnew", "tunnelServer": "http://tunnel.odpsstg.aliyun-inc.com" } }, "writer": { "name": "odpswriter", "parameter": { "accessId": "${dstAccessId}", "accessKey": "${dstAccessKey}", "project": "${dstProject}", "table": "${dstTable}", "partition": "pt", "column": [ "*" ], "odpsServer": "http://service.odpsstg.aliyun-inc.com/stgnew", "tunnelServer": "http://tunnel.odpsstg.aliyun-inc.com" } } } ] } }
4.2 啓動DataX
$ cd {YOUR_DATAX_DIR_BIN} $ python datax.py ./odps2odps.json
同步結束,顯示日誌以下:
4.3 、批量遷移
根據導出的表結構批量生成DataX同步腳本,我會協助完成。
場景二:公共雲數加DataIDE上兩個雲帳號之間數據遷移
這個場景比較容易理解,好比一個公司極可能會申請多個雲帳號,假如每一個雲帳號都開通了MaxCompute,極可能就會碰到兩個雲帳號的MaxCompute之間數據遷移。公共雲上都藉助於DataIDE使用MaxCompute,而DataIDE上面自己提供了數據同步任務,咱們經過配置數據同步任務便可很容易的完成數據遷移。執行步驟以下:
一、在其中一個MaxCompute項目空間項目管理中添加數據源,該數據源爲另外一個雲帳號的MaxCompute項目空間。
二、在DataIDE數據開發中新建「數據同步」任務,若是目標數據源中表還不存在,能夠點擊「快速建ODPS表」,配置字段映射等。
三、保存以後點擊「測試運行」便可。
場景三:網絡不通的兩個MaxCompute環境數據遷移
這種場景作數據同步侷限性比較大,因爲網絡不通,數據遷移必需要在中間落盤後再寫入,因此當數據量比較大時要考慮磁盤容量、帶寬等問題。步驟以下:
一、首先也是要先將源MaxCompute項目空間的DDL導出並在目標項目空間建立表,操做同場景一。
export <projectname> <local_path>;
二、安裝配置ODPS客戶端,操做同場景一。
三、經過ODPS CLT中的tunnel命令實現數據的導出。命令參考:
Example:
tunnel download test_project.test_table log.txt
四、經過ODPS CLT中的tunnel命令實現數據的導入。命令參考:
Example:
tunnel upload log.txt test_project.test_table
閱讀更多幹貨好文,請關注掃描如下二維碼: