DataX是異構數(shù)據(jù)源離線同步的工具,支持多種異構數(shù)據(jù)源之間高效的數(shù)據(jù)同步。Dataphin系統(tǒng)內(nèi)嵌了DataX組件,支持通過構建Shell任務調(diào)用DataX,實現(xiàn)數(shù)據(jù)同步。本教程以RDS MySQL數(shù)據(jù)庫為例,為您介紹基于Dataphin如何調(diào)用DataX同步數(shù)據(jù)。

前提條件

  • 已開通RDS MySQL實例,且RDS MySQL實例的網(wǎng)絡類型為專有網(wǎng)絡。如何開通RDS MySQL實例,請參見創(chuàng)建RDS MySQL實例
  • 已創(chuàng)建RDS MySQL實例的數(shù)據(jù)庫和賬號,創(chuàng)建過程中需要您記錄數(shù)據(jù)庫名稱、用戶名和密碼。如何創(chuàng)建數(shù)據(jù)庫和賬號,請參見創(chuàng)建數(shù)據(jù)庫和賬號

背景信息

Dataphin系統(tǒng)內(nèi)嵌了DataX組件,在Dataphin中創(chuàng)建和運行DataX任務(Shell任務)即可將DataX調(diào)用起來,以實現(xiàn)數(shù)據(jù)同步。

DataX支持同步數(shù)據(jù)的數(shù)據(jù)源包括MySQL、Oracle、SQL Server、PostgreSQL、HDFS、Hive、HBase等。DataX的更多信息,請參見DataX

使用限制

Shell任務不支持通過內(nèi)網(wǎng)地址訪問RDS MySQL實例。

操作流程

功能 描述
步驟一:連通RDS MySQL實例與Dataphin間的網(wǎng)絡 在您開始同步數(shù)據(jù)前,首先需要連通RDS MySQL實例和Dataphin間的網(wǎng)絡。
步驟二:創(chuàng)建數(shù)據(jù)同步的源表和目標表 登錄至RDS MySQL實例,創(chuàng)建本教程中用于數(shù)據(jù)同步的源表和目標表。
步驟三:下載并配置DataX任務的代碼模板 下載并配置DataX任務的代碼模板后,保存為datax.json
步驟四:上傳datax.json文件至Dataphin 上傳DataX任務代碼文件至Dataphin平臺后,DataX任務即可調(diào)用。
步驟五:創(chuàng)建DataX任務 在開發(fā)環(huán)境創(chuàng)建并運行同步數(shù)據(jù)的DataX任務。
步驟六:運行生產(chǎn)環(huán)境中的DataX任務 在生產(chǎn)環(huán)境運行DataX任務,保障生產(chǎn)環(huán)境業(yè)務數(shù)據(jù)的正常產(chǎn)出。

步驟一:連通RDS MySQL實例與Dataphin間的網(wǎng)絡

  1. 申請RDS MySQL實例的外網(wǎng)地址。如何申請外網(wǎng)地址,請參見申請或釋放外網(wǎng)地址
  2. 數(shù)據(jù)庫連接頁面,獲取RDS MySQL實例的外網(wǎng)地址和端口。
    faga
  3. 添加RDS MySQL實例的外網(wǎng)地址和端口至Dataphin項目空間的沙箱白名單。如何添加沙箱白名單,請參見添加沙箱白名單
  4. 添加0.0.0.0/0至RDS MySQL實例的白名單。如何添加白名單,請參見設置IP白名單
    注意 完成數(shù)據(jù)同步后,請立即刪除0.0.0.0/0

步驟二:創(chuàng)建數(shù)據(jù)同步的源表和目標表

使用命令行方式連接RDS MySQL實例,請參見方法三:使用命令行方式連接實例。創(chuàng)建同步數(shù)據(jù)的源數(shù)據(jù)表和目標數(shù)據(jù)表:
  1. 創(chuàng)建源數(shù)據(jù)表的代碼示例如下。
    create table datax_test1( area varchar(255),province varchar(255) );
    insert into datax_test1 values('華北','山東省'),('華南','河南省');
  2. 創(chuàng)建目標數(shù)據(jù)表的代碼示例如下。
    create table datax_test2( area varchar(255),province varchar(255) );

步驟三:下載并配置DataX任務的代碼模板

  1. 下載DataX任務的代碼模板
  2. 配置代碼模板中的如下參數(shù)后,保存為datax.json至本地。
    參數(shù) 描述
    {username} 配置為已創(chuàng)建RDS MySQL實例的用戶名,即登錄數(shù)據(jù)庫的用戶名。
    {password} 登錄數(shù)據(jù)庫的密碼。本教程中配置為前提條件已創(chuàng)建RDS MySQL實例的密碼,即登錄數(shù)據(jù)庫的密碼。
    {{Public Endpoint}:} 鏈接地址。本教程配置為已獲取的RDS MySQL實例的外網(wǎng)地址。
    {DatabaseName} 數(shù)據(jù)庫名稱。本教程配置為前提條件中已創(chuàng)建的RDS MySQL實例的數(shù)據(jù)庫名稱。
    {table_name1} 源數(shù)據(jù)表的表名。本教程配置為datax_test1
    {table_name2} 目標數(shù)據(jù)表的表名。本教程配置為datax_test2
    {columnname1} 數(shù)據(jù)同步的字段。本教程配置為area
    {columnname2} 數(shù)據(jù)同步的字段。本教程配置為province
    代碼模板的代碼如下。
    {
        "job": {
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "column": [
                                "{columnname1}",
                                "{columnname2}"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl":
    ["jdbc:mysql://{Public Endpoint}:3306/{DatabaseName}"],
                                    "table": ["{table_name1}"]
                                }
                            ],
                            "password": "{password}",        
                            "username": "{username}"
                        }
                    },
                    "writer": {
                        "name": "mysqlwriter",
                        "parameter": {
                            "column": [
                            "{columnname1}",
                            "{columnname2}"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl":
    "jdbc:mysql://{Public Endpoint}:3306/{DatabaseName}",
                                    "table": ["{table_name2}"]
                                }
                            ],
                            "password": "{password}",        
                            "username": "{username}"
                        }
                    }
                }
            ],
            "setting": {
                "speed": {
                    "channel": "1"
                }
            }
        }
    }

步驟四:上傳datax.json文件至Dataphin

  1. 登錄Dataphin控制臺
  2. 在Dataphin控制臺頁面,選擇工作區(qū)地域后,單擊進入Dataphin>>
  3. 在Dataphin首頁,單擊研發(fā)
  4. 在數(shù)據(jù)開發(fā)頁面,單擊數(shù)據(jù)處理
  5. 數(shù)據(jù)處理頁面的左側(cè)導航欄,單擊資源管理資源管理圖標。
  6. 資源管理頁面,單擊資源管理后的圖標。
  7. 新建資源對話框中,配置參數(shù)后,單擊提交
    gagaga
    參數(shù) 描述
    類型

    本教程中需要上傳的文件格式為JSON,則類型選擇others

    系統(tǒng)支持選擇的類型包括filejarpythonothers,適用場景說明如下:
    • 上傳的文件格式為XLS、DOC、TXT、CSV,則類型選擇為file
    • 上傳的文件格式為JAR,則類型選擇為jar
    • 上傳的文件格式為PY,則類型選擇為python
    • 上傳的文件格式非XLS、DOC、TXT、CSV、JAR、PY,則類型選擇為others
    名稱 本教程中的名稱為datax.json
    本教程名稱的命名規(guī)則如下:
    • 名稱必須以.json結(jié)尾。
    • 字母、數(shù)字、下劃線(_)或半角句號(.)組合組成。
    • 不能以數(shù)字開頭。
    描述 填寫資源的描述,例如DataX test。
    上傳文件 選擇步驟三:下載并配置DataX任務的代碼模板中保存至本地的datax.json文件。
    計算類型 本教程中上傳的資源(datax.json)用于DataX代碼任務中引用,因此選擇無歸屬引擎
    計算類型用于定義資源文件是否需要上傳至計算引擎的存儲層。Dataphin系統(tǒng)支持的計算類型包括MaxComputeFlink無歸屬引擎,適用場景說明如下:
    • 自定義MaxCompute類型的函數(shù)時,計算類型選擇為MaxCompute
    • 自定義Flink類型的函數(shù)時,計算類型選擇為Flink
    • 代碼任務引用的資源文件,計算類型選擇為無歸屬引擎
    選擇目錄 默認為資源管理
  8. 提交備注對話框,填寫備注信息后,單擊確定并提交
  9. 發(fā)布資源文件至生產(chǎn)環(huán)境。
    1. 數(shù)據(jù)開發(fā)頁面,單擊頂部菜單欄的發(fā)布
    2. 待發(fā)布對象列表頁面,單擊數(shù)據(jù)處理頁簽。
    3. 數(shù)據(jù)處理頁簽,單擊datax.json資源的操作列下的fagag圖標。
      faga
    4. 發(fā)布對話框,填寫發(fā)布名稱或備注信息后,單擊確定,即可將資源文件發(fā)布至生產(chǎn)環(huán)境。
    5. 單擊左側(cè)導航欄的發(fā)布記錄列表。在發(fā)布記錄列表頁面,查看資源文件的發(fā)布狀態(tài)為發(fā)布成功即可。
      fagag

步驟五:創(chuàng)建DataX任務

  1. 請參見步驟四:上傳datax.json文件至Dataphin,進入數(shù)據(jù)開發(fā)頁面。
  2. 在數(shù)據(jù)開發(fā)頁面,單擊左側(cè)區(qū)域的數(shù)據(jù)處理
  3. 數(shù)據(jù)處理頁面,單擊左側(cè)導航欄agaga計算任務圖標。
  4. 計算任務頁面,單擊計算任務后的圖標,選擇通用腳本 > SHELL
  5. 新建文件對話框,配置參數(shù)后,單擊確定
    gagag
    參數(shù) 描述
    名稱 本教程中的名稱為DataX
    調(diào)度類型 本教程中選擇任務的調(diào)度類型為手動節(jié)點
    調(diào)度類型用于定義任務發(fā)布至生產(chǎn)環(huán)境的調(diào)度方式。Datpahin系統(tǒng)支持的調(diào)度類型包括周期性節(jié)點手動節(jié)點,適用場景說明如下:
    • 任務需要參與系統(tǒng)的周期性調(diào)度,且需要依賴上游節(jié)點,則調(diào)度類型選擇為周期性節(jié)點
    • 任務不需要參與系統(tǒng)的周期性調(diào)度,且需要依賴上游節(jié)點,則調(diào)度類型選擇為手動節(jié)點。該類型的任務在生產(chǎn)環(huán)境的運行需要您手動觸發(fā)。
    描述 填寫對任務的簡單描述,例如測試DataX。
    選擇目錄 默認為計算任務
  6. 在代碼編寫頁面,編寫并運行DataX任務的代碼。
    代碼如下。
    @resource_reference{"datax.json"}
    python $DATAX_HOME/bin/datax.py datax.json #Dataphin系統(tǒng)已內(nèi)置DataX的安裝目錄為DATAX_HOME/bin/datax.py。
    其中,resource_reference{}用于調(diào)用已上傳的datax.json資源文件。
  7. 單擊頁面右上角的執(zhí)行,即可運行DataX任務。
    運行結(jié)果顯示的讀寫失敗總數(shù)為0時,表示DataX任務同步數(shù)據(jù)成功。gaga
  8. 發(fā)布DataX任務至生產(chǎn)環(huán)境。
    1. 計算任務頁面,單擊頂部菜單欄的發(fā)布
    2. 待發(fā)布對象列表頁面,單擊數(shù)據(jù)處理頁簽。
    3. 數(shù)據(jù)處理頁簽,單擊DataX任務的操作列下的fagag圖標。
      gsahs
    4. 發(fā)布對話框,填寫發(fā)布名稱或備注信息后,單擊確定,即可將DataX任務發(fā)布至生產(chǎn)環(huán)境。
    5. 單擊左側(cè)導航欄的發(fā)布記錄列表。在發(fā)布記錄列表頁面,查看DataX任務的發(fā)布狀態(tài)為發(fā)布成功即可。
      fagagh

步驟六:運行生產(chǎn)環(huán)境中的DataX任務

  1. 請參見步驟四:上傳datax.json文件至Dataphin,進入數(shù)據(jù)開發(fā)頁面。
  2. 在數(shù)據(jù)開發(fā)頁面,單擊頂部菜單欄的運維
  3. 運維中心,單擊項目名稱后的fagag圖標,切換至生產(chǎn)環(huán)境(rqgqag)。
  4. 運維中心,運行DataX任務。
    1. 單擊左側(cè)導航欄的dGFg圖標。
    2. 手動任務運維列表頁面,單擊DataX任務。
    3. DataX任務的詳情頁面,單擊頁面左上角的運行
      gaga
    4. 運行對話框,保持默認參數(shù),單擊確定
  5. 查看DataX任務運行生成的實例運行日志。
    1. 單擊左側(cè)導航欄的gagaga圖標。
    2. 手動實例運維列表頁面,單擊DataX任務。
    3. DataX任務的詳情頁面,單擊頁面上方的查看運行日志
      faga
    4. 運行日志頁面,查看讀寫失敗總數(shù)
      運行日志顯示的讀寫失敗總數(shù)為0時,表示DataX任務在生產(chǎn)環(huán)境同步數(shù)據(jù)成功,即可保障生產(chǎn)環(huán)境業(yè)務數(shù)據(jù)正常產(chǎn)出。fagag