閱讀589 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ODPS到ODPS數據遷移指南

1. 工具選擇與方案確定

目前,有兩種方式可用於專有雲環境下的從MaxCompute到MaxCompute整體數據遷移。

(1)使用DataX工具進行遷移,遷移所需的作業配置文件及運行腳本,可用DataX批量配置工具來生成;

(2)通過大數據開發套件(DataIDE)- 數據開發進行遷移,這種方式可選擇界麵向導模式逐步配置,操作簡單容易上手;

2. 具體實施

2.1 使用DataX工具

 這種場景需要先從源MaxCompute中導出元數據DDL,在目標MaxCompute中初始化表,然後借助DataX工具完成數據遷移,步驟如下:

2.1.1 DataX工具簡介

本步驟利用DataX工具進行數據遷移,DataX 是阿裏巴巴集團內被廣泛使用的離線數據同步工具/平台,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各種異構數據源之間高效的數據同步功能。DataX工具對於係統環境要求如下:

·          LinuxWindows

·          JDK(1.8)

·          Python(推薦Python2.6.X)

·          Apache Maven 3.x Compile DataX

2.1.2 工具下載及環境部署

1DataX工具下載及部署

因為專有域的ODPS處於專有域經典網絡中,即IP為阿裏雲的私有IP,與專有雲的網絡不通,所以需要在專有域的ECS部署datax。

下載DataX工具包,下載後解壓至本地某個目錄,修改權限為755,進入bin目錄,即可運行樣例同步作業:

2)安裝配置ODPS客戶端

客戶端下載解壓後,其配置文件位於config/odps_config.ini,配置項如下:

project_name=

access_id=<accessid>

access_key=<accesskey>

end_point=https://service.odps.aliyun.com/api


2.1.3 表結構遷移

本部分操作,可通過調用ODPS的SQL來完成。具體可編寫程序,調用ODPS SDK或ODPS cmd工具來進⾏。

對預遷移的表,在源ODPS中獲取表結構,根據表結構,在目標ODPS中批量運行組裝好的建表語句,即可完成。

2.1.3.1      要遷移的表名梳理

1.根據1.2中調研結果,梳理出表名列表;

2.此步驟,也可使用show tables語句獲取表名,然後將臨時表等不需要遷移的表名去除;

2.1.3.2      生成DDL建表(分區)語句

此步驟操作,在ODPS源端進行,可使用ODPS CMD工具。其配置文件位於config/odps_config.ini,配置項如下:

project_name=

access_id=<accessid>

access_key=<accesskey>

end_point=https://service.odps.aliyun.com/api

*這裏注意,專有雲環境下的end_point需要聯係專有雲管理人員獲取。

在專有雲環境下,可以在Bash環境中,執行如下示例語句,批量導出建表語句。請根據實際情況改寫shell語句,例如讀取表名列表文件等。這裏的odps_config.ini.src是源端ODPS的配置文件。


2.1.3.1      建立對應表(分區)

在目標端的DataIDE界麵依次執行建表語句,生成遷移所需要的表。

2.1.4 數據遷移

2.1.4.1  作業配置示例

1)創建作業的配置文件(json格式)

可以通過命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER},並根據json樣例填空完成配置即可。

以odps2odps.json樣例:python datax.py -r odpsreader -w odpswriter,(填寫相關參數,odpsServer/ tunnelServer要改成源/目標ODPS配置):

 

                        "odpsServer": " https://service.odps.aliyun.com/api ",

                        "odpsServer": " https://service.odps.aliyun.com/api ",

2)運行DataX任務

同步結束,顯示日誌如下:

任務啟動時刻                    : 2017-05-10 11:19:35

任務結束時刻                    : 2017-05-10 11:20:09

任務總計耗時                    :                 34s

任務平均流量                    :          571.50KB/s

記錄寫入速度                    :          18287rec/s

讀出記錄總數                    :              548639

讀寫失敗總數                    :                   0

運行後,可在終端查看運行信息。建議真正跑任務時,可使用DataX批量工具的方式運行。具體如下:

2.1.4.1     DataX批量工具使用方法

1)功能

該工具可以自動獲取源表和目標表的屬性及分區信息,自動生成源表所有分區的json文件,並生成批量串行腳本和批量檢測腳本。方便大家的數據遷移。

注:具體腳本詳見附件https://yq.aliyun.com/articles/datax_tools內。

2)操作過程

l  mkdir ./json ./log ./temp

l  config.ini中配置好源ODPS和目標ODPS相關的accessIDaccessKEYprojectODPS server等相關信息;

l  config.ini中配置好datax.pyodmscmd的路徑;

l  tables.ini中配置好需要遷移的表名;

l  運行python https://yq.aliyun.com/articles/datax_tools.py,生成運行腳本;

l  運行run_datax.sh,批量順序執行遷移任務;

l  運行check_datax.sh,進行源表和目標表的條數校驗;

3)詳細說明

Ø  工具配置

l  ODPS配置與目標ODPS配置

在配置文件config.ini的reader_common和writer_common區域,reader表示源ODPS,writer表示目標ODPS。主要配置accessID、accessKey和project名。這些均可從base的用戶信息獲取。

l  datax的相關配置

在配置文件config.ini的datax_settings區域。

datax_speed: 控製datax實際運行時的速度上限;

reader_project_auth: datax的驗證機製,可為空。如果驗證失敗,可以輸入一個源ODPS ID具備owner權限的項目名;

reader_odps_server: 源ODPS的api url,可從cmdb查詢,或找雲管理員獲取;

writer_odps_server: 目標ODPS的api url,可從cmdb查詢,或找雲管理員獲取;

writer_odps_tunnel: 目標ODPS的tunnel,可從cmdb查詢,或找雲管理員獲取;

writer_truncate: 覆蓋式導入開關;

writer_accoutType: 一般默認為aliyun;

l  工具的相關配置

本批量工具的相關配置,需要注意datax.py和odpscmd的路徑,其餘一般不用修改。

Ø  源表和目標表添加在配置文件tables.ini

l  若源表和目標表的表名相同,則直接輸入源表的表名即可,每行一個表名;

l  若源表和目標表的表名不同,則每行輸入一個源表名和一個目標表名,兩者之間用空格分隔;

Ø  生成腳本直接運行python https://yq.aliyun.com/articles/datax_tools.py即可

l  運行過程中會打印運行的odpscmd語句及相關運行信息,該語句可能會有延遲或失敗;

l  運行的所有過程會記錄在./log/info.log中;

l  腳本運行完畢會打印所有獲取信息失敗的表名;

l  所有獲取信息成功的表,會生成相關的json文件,存儲在./json中;

l  生成run_datax.sh腳本,用於實際進行datax任務;

l  生成check_datax.sh腳本,用於運行完任務後進行校驗;

Ø  批量運行datax任務運行run_datax.sh的腳本,批量順序執行datax任務

l  相關日誌存儲在./log/表名.log中;

l  若想並行運行程序,可修改run_datax.sh中的語句,改為後台運行;

l  批量檢測;

l  data_x的所有任務完成後,運行check_datax.sh的腳本,會生成所有源表和目標表所有的條數;

l  為減少對ODPS的請求次數,腳本會一次請求該ODPS(源表,目標表)所有遷移表的條數;

l  結果會存儲在./log/check_src.log, ./log/check_dst.log兩個日誌中;

l  可用vimdiff來比較兩個日誌,查看具體哪個表條數不同。

2.2 通過Base中的CDP同步數據

2.2.1 CDP簡介

CDP是阿裏集團對外提供的穩定高效、彈性伸縮的數據同步平台,為阿裏雲大數據計算引擎(包括 MaxCompute、AnalyticDB 等)提供離線(批量)的數據進出通道 。

2.2.2 數據源配置


在目的雲賬號的MaxCompute項目空間的數據集成中添加數據源,該數據源為另一個雲賬號的MaxCompute項目空間。

8c42fc9b0152cb652e88bd7c3e76a3e675ab8716

在新增數據源彈出框中填寫相關配置項,並測試連通性。若測試連通性成功,則點擊保存按鈕完成配置信息保存。

2.2.3 作業配置示例

Ø  新建同步任務

1. 在“數據集成”界麵,點擊左側導航欄 同步任務;


2. 點擊界麵中的“向導模式”,即可進入任務配置頁麵 。

fdb9f6a4bc6b868732ce599ee9e5b2599614e6c4

Ø  配置數據同步任務

同步任務節點包括“選擇來源”、“選擇目標”、“字段映射”、“通道控製”四大配置項 。

1. 選擇來源


選擇數據源(數據源為“新建數據源”中已經建立好的數據源)後並且選擇數據表。

fea5a9e2c2fa6ff412ad06260fbcd9c29ac75ac4

2. 選擇目標


點擊“快速建表”可將源頭表的建表語句轉化為符合 MaxCompute SQL 語法規範的 DDL 語句新建目標表 。選擇後點擊“下一步”。

fd83c9a2f4f154c0f5c3c9e383de9a5bc7da58c0

l  分區信息:分區是為了便於查詢部分數據引入的特殊列,指定分區便於快速定位到需要的數據。支持常量和變量

l  清理規則:

1)寫入前清理已有數據:導數據之前,清空表或者分區的所有數據,相當於 insert overwrite 。

2)寫入前保留已有數據:導數據之前不清理任何數據,每次運行數據都是追加進去的,相當於 insert into 。


在參數配置中為參數賦值,如下圖所示:

959ef21b1b470a43df6f7ee9c61b9ddd727e5312


3. 映射字段


需對字段映射關係進行配置,左側“源頭表字段”和右側“目標表字段”為一一對應的關係。

044abe5cf69c226b1aa317c0970c4bd62b6efd6d

增加/刪除,點擊”添加一行”可單個增加字段。鼠標 Hover 上每一行,點擊刪除圖標可以刪除當前字段。

4. 通道控製


通道控製用來配置作業速率上限和髒數據檢查規則,如下圖所示:

b38858e43a7cb0d15da5499ef7cf7617e45acb58

l  作業速率上限,即配置當前數據同步最大上限並不是實際的流量,速度上線越大資源占用也會越多,每個項目資源是有限的,能否一定達到上限速度也和您的數據源能力相關,向導模式配置的作業速率上限為10MB/S,腳本模式可以設置更大的作業速率。

l  當錯誤記錄數(即髒數據數量)超過所配置的個數時,該數據同步任務結束

5. 預覽保存

完成以上配置後,點擊“下一步”即可預覽,如若無誤,點擊“保存”,如下圖所示:

0f5ccbb1690d728b16f948e2358a84ceae4b48f0


備注:如果您想切換為腳本模式,點擊工具欄中的轉換腳本即可

Ø  提交數據同步任務,並測試工作流

1. 點擊頂部菜單欄提交

2. 提交成功後點擊測試運行

3. 查看同步數據 。

2.2.4 配置批量數據同步任務

通過創建工作流的方式,將多個數據同步任務放入同一工作流執行,即可實現數據表的批量遷移。具體操作步驟如下:

537abf5ac2ab3d3d8d757c9a0e53b159cc54bbd9

2.2.4.1  創建工作流

步驟1:以開發者身份進入阿裏雲數加平台>大數據開發套件>管理控製台,點擊對應項目操作欄中的進入工作區。

步驟2:創建工作流文件目錄。

步驟3:目錄文件夾上點擊右鍵新建任務>工作流任務,或右邊工作區點擊新建任務>工作流任務。


步驟4:在新建工作流彈出框中填寫各配置項。


d71cd865000893db4845fbb4b2c810074cb0e0e0

步驟5:點擊創建。

步驟6:點擊右側導航欄的調度配置進行配置。

2.2.4.1     配置數據同步任務

原始數據在MaxCompute中,需要先在目的雲賬號的MaxCompute項目空間的項目管理中添加數據源,該數據源為另一個雲賬號的MaxCompute項目空間。這一步我們已在3.2.1中完成。接下來我們可以開始創建數據導入任務。具體操作如下:

步驟1:在上一步創建的工作流設計器的節點組件中向畫布拖拽一個虛節點組件,作為開始節點;


步驟2:在工作流設計器的節點組件中向畫布拖拽一個數據同步節點組件,進行創建;

e33788bb32309f0782ea83236eb527be66a2cbda

步驟3:雙擊該節點或右鍵查看節點內容進入任務配置界麵。具體操作同2.2.3作業配置示例;

步驟4:配置節點依賴,節點依賴關係如上圖所示;

步驟5:點擊“保存”、“提交”,然後就可以進行測試運行,可以通過執行日誌監控執行成功與否。

2.3優勢與限製

2.3.1優勢與特點

Ø  使用DataX工具

(1)  DataX通過配置文件做源和目標的映射非常靈活;

(2)  可以通過DataX批量配置工具生成批量遷移所需要的腳本和作業配置文件。

Ø  通過大數據開發套件(DataIDE-數據開發做數據同步

(1)  這種方式可以通過選擇界麵向導逐步配置,操作簡單容易上手,學習成本低;

(2)  對於目標端不存在的表可以使用向導模式提供的快速建表功能新建目標表;

(3)  腳本模式可以提供更豐富靈活的能力,做精細化的配置管理,適合高級用戶,學習成本較高。

2.3.2 約束與限製

Ø  使用DataX工具

1)新建專有雲環境中不支持odpscmd客戶端訪問,無法進行批量建表,需通過大數據開發套件手動創建;

Ø  通過大數據開發套件(DataIDE-數據開發做數據同步

(1)需要確保數據源連通性,同時對數據同步的速度也有限製,最高10M/s。

最後更新:2017-09-19 10:03:15

  上一篇:go  Junit模擬http請求
  下一篇:go  ODPS到ADS數據遷移指南