淺談數據同步之道

數據同步,顧名思義就是不一樣系統的數據進行同步處理。而業務系統所涉及的數據庫同步是重中之重,雖然大部分數據庫都提供了導入導出的工具,可是數據存儲到各個地方,Hive、Hbase、MySQL、Oracle 等各類各樣的不一樣數據庫,然而要把數據同步到指定不一樣類型的存儲庫是很是麻煩。那該如何統一實現數據源同步?下面介紹幾種經常使用的同步的方案和工具。mysql

一、Sqoopsql

Apache Sqoop 是一種工具,用於在 Apache Hadoop 和外部數據存儲(如關係數據庫,企業數據倉庫)之間高效傳輸批量數據。數據庫

Sqoop 用於將數據從外部數據存儲導入 Hadoop Hdfs 或 Hive 和 HBase 等相關 Hadoop 生態系統。一樣,Sqoop 還可用於從 Hadoop 或其生態系統中提取數據,並將其導出到外部數據存儲區,如關係數據庫、數據倉庫。Sqoop 適用於 Oracle,MySQL,Postgres 等關係數據庫。json

Sqoop 數據導入命令示例以下。架構

sqoop import 
-connect jdbc:mysql://localhost:3306/sqoop 
-username root 
-password 123456 
-table emp_etl 
-m 3 
-hive-import 
-create-hive-table  
-hive-table  emp_mysql

經過命令行界面執行 Sqoop 命令。也可使用 Java API 訪問 Sqoop。Sqoop 解析命令行生成 MapRedure 並只啓動 Hadoop Map 做業以導入或導出數據,由於只有在須要聚合時才須要 Reduce 階段。Sqoop 只是導入和導出數據, 它沒有作任何聚合。併發

映射做業根據用戶定義的數量(-m 3)啓動多個映射器。對於 Sqoop 導入,將爲每一個映射器任務分配一部分要導入的數據。Sqoop 在映射器之間平均分配輸入數據以得到高性能。而後,每一個映射器使用 JDBC 建立與數據庫的鏈接,並獲取由 Sqoop 分配的數據部分,將其寫入 HDFS 或 Hive 或 HBase。框架

二、Datax工具

DataX 是阿里開發的一個異構數據源離線同步工具,致力於實現包括關係型數據庫(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各類異構數據源之間穩定高效的數據同步功能。oop

image

DataX 自己做爲離線數據同步框架,採用 Framework + plugin 架構構建。將數據源讀取和寫入抽象成爲 Reader/Writer 插件,歸入到整個同步框架中。性能

image

Reader:爲數據採集模塊,負責採集數據源的數據,將數據發送給 Framework。

Writer: 爲數據寫入模塊,負責不斷向 Framework 取數據,並將數據寫入到目的端。

Framework:用於連 接reader 和writer ,做爲二者的數據傳輸通道,並處理緩衝,流控,併發,數據轉換等核心技術問題。

Datax 使用比較簡單,只下載 Datax 解壓,配置須要運行環境,經過命令運行寫好的 json 文件既能夠執行任務,另外能夠經過二次開發插件支持新的數據源類型,易拓展。

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "xxxreader",
          ...
        },
        "writer": {
          "name": "xxxwriter",
          ...
        }
      }
    ],
    ...
  }
}

三、Canal

不管是 Sqoop 仍是 Datax 都是屬於離線同步, 不支持實時的數據抽取。這裏說個 MySQL 數據庫的同步組件
Canal,很是便捷地將 MySQL 中的數據抽取到任意目標存儲中。

原理就是 Canal 假裝成 MySQL 從節點,讀取 MySQL 的 binlog(一個二進制格式的文件,它記錄了數據庫的全部改變,並以二進制的形式保存在磁盤中。),生成消息,客戶端訂閱這些數據變動消息,處理並存儲。只要開發一個 Canal 客戶端就能夠解析出 MySQL 的操做,再將這些數據發送到大數據流計算處理引擎,便可以實現對 MySQL 實時處理。

四、kettle

Kettle 是一款開源的 ETL 工具,實現對各類數據源讀取,操做和寫入數據,Kettle 無需安裝解壓便可使用,可經過客戶端進行配置和執行做業。Kettle 中有兩種腳本文件,transformation 和 job,transformation 完成針對數據的基礎轉換,job 則完成整個工做流的控制。

五、Informatica PowerCenter

Informatica PowerCenter 是世界級的 企業數據集成平臺,從異構的已有系統和數據源中抽取數據,用來構建和管理企業的數據倉庫,從而幫助企業作出快速、正確的決策。此產品爲知足企業級要求而設計,能夠提供企業部門的數據和非關係型數據之間的集成,如XML,網站日誌,關係型數據,主機和遺留系統等數據源。

小結

那咱們該如何選擇合適同步的工具。大數據平臺是與 Hadoop 集羣相掛鉤,在離線同步通常選擇 Sqoop,Sqoop 從一開始就是爲大數據平臺的數據採集業務服務,並且做爲 Apache 頂級的項目,Sqoop 比起 Datax 更加可靠,若是涉及阿里自身的數據庫系列選擇 Datax 是一個不錯的選擇。在實時同步數據,通常採用 Kafka 做爲中間組件,跟 Canal 結合實現 MySQL 到 Hive 增量數據同步。kettle 和 Informatica PowerCenter 通常在建設數倉中使用,經過客戶端配置 ETL 任務定製。

相關文章
相關標籤/搜索