1. 程式人生 > >datax初識(安裝與測試)

datax初識(安裝與測試)

1 一些概念

資料整合(data integration):資料整合是把不同來源、格式、特點性質的資料在邏輯上或物理上有機地集中,從而為企業提供全面的資料共享。

全量與增量:全量,每天定時(避開業務高峰期)或者週期性全量把資料從一個地方拷貝到另外一個地方,可以採用直接全部覆蓋(使用“新”資料覆蓋“舊”資料);或者走更新邏輯(覆蓋前判斷下,如果新舊不一致,就更新);

增量的基礎是全量,就是你要使用某種方式先把全量資料拷貝過來,然後再採用增量方式同步更新,就是指抓取某個時刻(更新時間)或者檢查點(checkpoint)以後的資料來同步,不是無規律的全量同步。這裡引入一個關鍵性的前提:副本一端要記錄或者知道(通過查詢更新日誌或者訂閱更新)哪些更新了。

2 dataX使用

2.1 介紹

​ DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各種異構資料來源之間高效的資料同步功能。DataX採用了框架 + 外掛 的模式,目前已開源,程式碼託管在github。

注:1、OceanBase是一個支援海量資料的高效能分散式資料庫系統,實現了數千億條記錄、數百TB資料上的跨行跨表事務,由淘寶核心系統研發部、運維、DBA、廣告、應用研發等部門共同完成。

​ 2、OTS(Open Table Service,現在已更名為表格儲存Table Store)是構建在阿里雲飛天分散式系統之上的 NoSQL 資料庫服務,提供海量結構化資料的儲存和實時訪問。

​ 3、ODPS (Open Data Processing Service),是阿里巴巴通用計算平臺提供的一種快速、完全託管的 GB/TB/PB 級資料倉庫解決方案,現在已更名為MaxCompute

  • 設計理念

    ​ 為了解決異構資料來源同步問題,DataX將複雜的網狀的同步鏈路變成了星型資料鏈路,DataX作為中間傳輸載體負責連線各種資料來源。當需要接入一個新的資料來源的時候,只需要將此資料來源對接到DataX,便能跟已有的資料來源做到無縫資料同步。

  • 框架架構
    在這裡插入圖片描述

    DataX本身作為離線資料同步框架,採用Framework + plugin架構構建。將資料來源讀取和寫入抽象成為Reader/Writer外掛,納入到整個同步框架中。

    • Reader:Reader為資料採集模組,負責採集資料來源的資料,將資料傳送給Framework。
    • Writer: Writer為資料寫入模組,負責不斷向Framework取資料,並將資料寫入到目的端。
    • Framework:Framework用於連線reader和writer,作為兩者的資料傳輸通道,並處理緩衝,流控,併發,資料轉換等核心技術問題。
  • 核心架構
    在這裡插入圖片描述

  1. DataX完成單個數據同步的作業,我們稱之為Job,DataX接受到一個Job之後,將啟動一個程序來完成整個作業同步過程。DataX Job模組是單個作業的中樞管理節點,承擔了資料清理、子任務切分(將單一作業計算轉化為多個子Task)、TaskGroup管理等功能。
  2. DataXJob啟動後,會根據不同的源端切分策略,將Job切分成多個小的Task(子任務),以便於併發執行。Task便是DataX作業的最小單元,每一個Task都會負責一部分資料的同步工作。
  3. 切分多個Task之後,DataX Job會呼叫Scheduler模組,根據配置的併發資料量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的併發執行完畢分配好的所有Task,預設單個任務組的併發數量為5。
  4. 每一個Task都由TaskGroup負責啟動,Task啟動後,會固定啟動Reader—>Channel—>Writer的執行緒來完成任務同步工作。
  5. DataX作業執行起來之後, Job監控並等待多個TaskGroup模組任務完成,等待所有TaskGroup任務完成後Job成功退出。否則,異常退出,程序退出值非0

舉例:DataX排程流程

使用者提交了一個DataX作業,並且配置了20個併發,目的是將一個100張分表的mysql資料同步到odps裡面。 DataX的排程決策思路是:

  1. DataXJob根據分庫分表切分成了100個Task。
  2. 根據20個併發,DataX計算共需要分配4個TaskGroup。(預設單個任務組的併發數量為5)
  3. 4個TaskGroup平分切分好的100個Task,每一個TaskGroup負責以5個併發共計執行25個Task。

2.2 安裝

2.2.1 系統需求

  • Linux

  • JDK(1.8以上,推薦1.8)

  • Python(推薦Python2.6.X),我使用的是 2.7.10(啟動命令:python2.7,由於同時安裝了python3)

    原因:因為後面執行datax.py的時候,裡面的python的print會執行不了,導致執行不成功,會提示你print語法要加括號,python2中加不加都行 python3中必須要加,否則報語法錯

  • Apache Maven 3.x (Compile DataX)

2.2.2 安裝

cd /Users/wangzuan
tar -xzvf datax.tar.gz

2.3 配置

2.3.1 第一步、建立創業的配置檔案(json格式)

可以通過命令檢視配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}、
在這裡插入圖片描述

2.3.2 以mysql為例

  • 源表結構與資料:

!在這裡插入圖片描述

  • 根據模板配置json檔案(myjob.json)如下:
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [
							"myid",
                            "name",
				"mypart"
						], 
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/test"], 
                                "table": ["b"]
                            }
                        ], 
                        "password": "*****", 
                        "username": "root"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": [
                        "myID",
                        "name",
			"part"
						], 
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/test", 
                                "table": ["b_copy"]
                            }
                        ], 
                        "password": "123456", 
                        "username": "root"
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}
  • 我們需要準備好目的資料庫表

2.4 啟動

在這裡插入圖片描述
在這裡插入圖片描述
結果出現中文亂碼

分析 1、目的資料庫設計表的時候是否把格式調整為UTF-8;2、在json檔案中jdbcUrl項加上:?characterEncoding=utf8

在這裡插入圖片描述

修改後,成功

在這裡插入圖片描述