Hadoop的數據采集框架
問題導讀:
Hadoop數據采集框架都有哪些?
Hadoop數據采集框架異同及適用場景?
Hadoop提供了一個高度容錯的分布式存儲系統,幫助我們實現集中式的數據分析和數據共享。在日常應用中我們比如要將各種數據采集到HDFS存儲服務中去,說到將數據采集到HDFS,我們熟知的框架包括:
- Apache Sqoop
- Apache Flume
- Gobblin DataX
- Kettle
以及其他很多針對特定數據源的采集工具:比如針對Cassandra數據源的Aegisthus,針對mongodb的mongo-hadoop等等。
本文就對以上常見的數據采集服務進行簡單的介紹,幫助我們了解各個項目的特點以及適用場景。
Apache Sqoop
Sqoop : SQL-to-Had oop,用於在關系型數據庫(RDBMS)和HDFS之間互相傳輸數據。
Sqoop 啟用了一個MapReduce任務來執行數據采集任務,傳輸大量結構化或半結構化數據的過程是完全自動化的。其主要通過JDBC和關系數據庫進行交互,理論上支持JDBC的Database都可以使用Sqoop和HDFS進行數據交互。
Sqoop目前分為兩個版本Sqoop1和Sqoop2。這是兩個完全不同的版本,完全不兼容。Sqoop1了解的朋友都知道它就是一個命令行腳本,而Sqoop2相比Sqoop1引入了sqoop server,集中化的管理Connector,引入基於角色的安全機制,而且支持多種訪問方式:cli客戶端,Web ui和Rest API。
Sqoop不支持文件解析入庫,適用於關系型數據庫與HDFS/Hive/HBase之間互相傳輸數據。它支持多種關系型數據庫如mysql、oracle、postgresql。可以高效可控的進行數據導入導出。
Github Star 462, Fork 362
Apache Flume
Apache Flume是一個分布式、可靠、高可用的日誌收集系統,支持各種各樣的數據來源,如http,log文件,監聽端口數據等等,將這些數據源的海量日誌數據進行高效收集、聚合、移動,最後存儲到指定存儲系統中(可擴展),如kafka、HDFS分布式文件系統、Solr,HBase等。
Flume基於流式數據,適用於日誌和事件類型的數據收集,重構後的Flume-NG版本中一個agent(數據傳輸流程)中的source(源)和sink(目標)之間通過channel進行鏈接,同一個源可以配置多個channel。多個agent還可以進行鏈接組合共同完成數據收集任務,使用起來非常靈活。
Github Star 1418, Fork 1092
Gobblin
Gobblin是用來整合各種數據源的通用型ETL框架,在某種意義上,各種數據都可以在這裏“一站式”的解決ETL整個過程,專為大數據采集而生。
作為一個通用框架,Gobblin的接口封裝和概念抽象做的很好,作為一個ETL框架使用者,我們只需要實現我們自己的Source,Extractor,Conventer類,再加上一些數據源和目的地址之類的配置文件提交給Gobblin就行了。Gobblin相對於其他解決方案具有普遍性、高度可擴展性、可操作性。
Github Star 1381, Fork 540
DataX
DataX 是一個異構數據源離線同步工具,致力於實現包括關系型數據庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。
被阿裏開源之後的DataX社區並不活躍,但是好在程序的架構設計的好,大部分用戶都會選擇fork之後基於其進行二次開發。DataX本身由阿裏開發對於阿裏自身的數據庫比如ODPS、ADS等支持更好。
Github Star 1128, Fork 478
Kettle
Kettle是一款開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麽,而不是你想怎麽做。
Kettle 中文名稱叫水壺,寓意就是希望把各種數據放到一個壺裏,然後以一種指定的格式流出。
Kettle是CS架構,擁有自己的管理控制臺,同樣也可以通過Java代碼與我們的工程進行集成,在程序中完成kettle的轉換、執行等操作。
Github Star 1956, Fork 1476
本文簡單介紹了上面幾種數據采集框架,當我們使用的時候需要考慮到業務場景,關系庫相關采集的可以首選sqoop。日誌文件等實時采集錄入則選擇Flume,文件和數據庫都要兼顧則選擇Gobblin。後續會對這三類進行詳細介紹。至於DataX可以看看其架構,設計思想非常不錯。
歡迎關註我:叁金大數據(不穩定持續更新~~~)
Hadoop的數據采集框架