MySQL添加Hadoop數(shù)據(jù)實時復制功能
TT中國 發(fā)表于:13年05月09日 13:48 [轉(zhuǎn)載] 網(wǎng)界網(wǎng)
MySQL復制操作可以將數(shù)據(jù)從一個MySQL服務器(主)復制到其他的一個或多個MySQL服務器(從)。試想一下,如果從服務器不再局限為一個MySQL服務器,而是其他任何數(shù)據(jù)庫服務器或平臺,并且復制事件要求實時進行,是否可以實現(xiàn)呢?
MySQL團隊最新推出的 MySQL Applier for Hadoop(以下簡稱Hadoop Applier)旨在解決這一問題。
用途
例如,復制事件中的從服務器可能是一個數(shù)據(jù)倉庫系統(tǒng),如Apache Hive,它使用Hadoop分布式文件系統(tǒng)(HDFS)作為數(shù)據(jù)存儲區(qū)。如果你有一個與HDFS相關的Hive元存儲,Hadoop Applier就可以實時填充Hive數(shù)據(jù)表。數(shù)據(jù)是從MySQL中以文本文件形式導出到HDFS,然后再填充到Hive。
操作很簡單,只需在Hive運行HiveQL語句'CREATE TABLE',定義表的結構與MySQL相似,然后運行Hadoop Applier即可開始實時復制數(shù)據(jù)。
優(yōu)勢
在Hadoop Applier之前,還沒有任何工具可以執(zhí)行實時傳輸。之前的解決方案是通過Apache Sqoop導出數(shù)據(jù)到HDFS,盡管可以批量傳輸,但是需要經(jīng)常將結果重復導入以保持數(shù)據(jù)更新。在進行大量數(shù)據(jù)傳輸時,其他查詢會變得很慢。且在數(shù)據(jù)庫較大的情況下,如果只進行了一點更改,Sqoop可能也需要較長時間來加載。
而Hadoop Applier則會讀取二進制日志,只應用MySQL服務器上發(fā)生的事件,并插入數(shù)據(jù),不需要批量傳輸,操作更快,因此并不影響其他查詢的執(zhí)行速度。
實現(xiàn)
Applier使用一個由libhdfs(用于操作HDFS中文件的C庫)提供的API。實時導入的過程如下圖所示:
數(shù)據(jù)庫被映射作為一個單獨的目錄,它們的表被映射作為子目錄和一個Hive數(shù)據(jù)倉庫目錄。插入到每個表中的數(shù)據(jù)被寫入文本文件(命名如datafile1.txt),數(shù)據(jù)以逗號或其他符號分割(可通過命令行進行配置)。