2009-08-02 96 views
11

我想用MapReduce方法分析連續的數據流(通過HTTP訪問),所以我一直在研究Apache Hadoop。不幸的是,Hadoop似乎希望用一個固定大小的輸入文件開始一項工作,而不是在消費者到達時能夠將新數據交給消費者。這是真的嗎,還是我錯過了什麼?是否有不同的MapReduce工具可用於從開放套接字讀入數據?可伸縮性在這裏是一個問題,所以我寧願讓MapReducer處理混亂的並行化問題。流數據和Hadoop? (而不是Hadoop流)

我玩過Cascading,能夠在通過HTTP訪問的靜態文件上運行作業,但這並不能真正解決我的問題。我可以使用curl作爲一箇中間步驟,將數據轉儲到Hadoop文件系統的某個地方,並在每次新的數據塊準備就緒時編寫一個監視器來發出新的作業,但這是一種骯髒的破解;必須有一些更優雅的方式來做到這一點。有任何想法嗎?

回答

10

你所描述的破壞或多或少是做事情的標準方式 - Hadoop基本上是一個批處理系統(一方面,如果沒有數據結束,Reducers永遠無法啓動,因爲他們必須在地圖階段完成後開始)。

旋轉你的日誌;當你旋轉它們時,將它們轉儲到HDFS中。有一個看門狗進程(可能是分佈式進程,使用ZooKeeper進行協調)監視傾倒場並啓動新的處理作業。您將需要確保作業在足夠大的輸入上運行以保證開銷。

Hbase是hadoop生態系統中的一個BigTable克隆,它可能會讓你感興趣,因爲它允許連續的插入流;但是,仍然需要以批處理模式運行分析查詢。

2

我想你應該看看Esper CEP(http://esper.codehaus.org/)。

+0

我對這個領域並不是很熟悉,但是第一眼看也很喜歡ActiveInsight(CPAL許可證 - 要求歸屬)。 – 2009-12-14 11:00:49

0

您的用例聽起來與使用Hadoop編寫Web爬網程序的問題類似 - 數據流從打開的套接字(緩慢地)返回,以通過HTTP獲取遠程頁面。

如果是,則參見Why fetching web pages doesn't map well to map-reduce。您可能想查看Bixo中的FetcherBuffer類,它在Reducer中通過線程方法(通過Cascading)來解決這類問題。

6

http://s4.io/怎麼樣。它用於處理流數據。

更新

一個新的產品正在崛起:Storm - 分佈式和容錯的實時計算:流處理,連續計算,分佈式RPC,多

+1

我認爲這是S4的正確URL:http://incubator.apache.org/s4/ – Bklyn 2013-04-26 21:08:23

0

正如您所知道的,Hadoop在流挖掘中使用的主要問題是,首先它使用HFDS,這是一個磁盤和磁盤操作帶來的延遲,導致數據流丟失。其次,管道是不平行的。 Map-Reduce通常對批處理數據進行操作,而不是對流數據進行操作。

我最近閱讀了一篇關於M3的文章,它明顯地通過繞過HDFS解決了第一個問題,並在對象數據庫中執行內存計算。對於第二個問題,他們正在使用增量學習者,這些學習者不再是批量執行的。值得看看M3 : Stream Processing on Main-Memory MapReduce。我無法在任何地方找到此M3的源代碼或API,如果有人發現它,請在此分享鏈接。

此外,Hadoop的在線也是另一個原型attemps解決相同的問題M3的作用:Hadoop Online

然而,Apache Storm是問題的關鍵解決方案,但是這是不夠的。你需要一些等價的map-reduce權限,這就是爲什麼你需要一個名爲SAMOA的庫,它實際上具有很好的mahout缺乏的在線學習算法。

1

這裏有多個選項。 我建議Kafka和Storm +(Hadoop或NoSql)的組合作爲解決方案。 我們已經使用這些開源工具構建了我們的大數據平臺,並且工作得非常好。

0

市場上有幾種成熟的流處理框架和產品。開源框架是例如Apache Storm或Apache Spark(它們都可以在Hadoop之上運行)。您還可以使用IBM InfoSphere Streams或TIBCO StreamBase等產品。

查看本文的InfoQ文章,詳細解釋了流處理以及所有這些框架和產品:Real Time Stream Processing/Streaming Analytics in Combination with Hadoop。除此之外,文章還解釋了這是如何補充Hadoop的。

順便說一句:許多軟件供應商(如Oracle或TIBCO)都稱這種流處理/流分析方法爲「快速數據」而不是「大數據」,因爲您必須實時採取行動而不是批處理。

+0

只需添加一些信息:查看我的博客文章,瞭解[何時使用流處理framweork與一個產品] [1]。 總之,您可以**使用這些工具處理運動中的數據**。儘管如此,你可以(或必須)仍然將它們存儲在某個地方。因此,這些框架和產品也可以與Apache Hadoop(僅用於存儲或通過運行Hadoop上的其中一個框架進行處理)相結合。幻燈片還更詳細地討論了這一點。 [1]:http://www.kai-waehner.de/blog/2015/10/25/comparison-of-stream-processing-frameworks-and-products/ – 2015-10-25 20:53:55

0

您應該嘗試Apache Spark Streaming。 它應該適合你的目的。