2010-04-29 19 views
14

有人可以解釋一下MapReduce如何與Cassandra.6搭配使用嗎?我已經讀過了字數統計的例子,但我並不完全瞭解Cassandra的結局與「客戶端」的結局。如何使用Cassandra的Map Reduce或不帶豬?

https://svn.apache.org/repos/asf/cassandra/trunk/contrib/word_count/

舉例來說,假設我使用Python和Pycassa,我將如何加載新的地圖功能降低,然後再打電話嗎?我的地圖縮小功能是否必須是安裝在cassandra服務器上的java?如果是這樣,我如何從Pycassa調用它?

還有一提到豬使這一切都更容易,但我是一個完整的Hadoop noob,所以這並沒有真正的幫助。

你的答案可以使用Thrift或其他,我剛纔提到Pycassa來表示客戶端。我只是想了解在Cassandra集羣中運行的內容與發出請求的實際服務器之間的區別。

回答

10

從我聽說的(和從here),開發人員編寫一個使用Cassandra作爲數據源的MapReduce程序的方式如下。你編寫一個常規的MapReduce程序(你鏈接的例子是純Java版本),現在可用的jar提供了一個CustomInputFormat,它允許輸入源爲Cassandra(而不是默認的,即Hadoop)。

如果你使用Pycassa,我會說你運氣不好,直到(1)該項目的維護者增加了對MapReduce的支持,或者(2)你將一些Python函數一起拋出,寫出一個Java MapReduce編程並運行它。後者絕對是一個黑客,但會讓你起身走。

+1

因此,Cassandra節點不會執行map reduce操作,無論您的Java運行在哪裏? – UltimateBrent 2010-04-29 22:02:25

+0

是的,Hadoop jobtrackers運行m/r作業。 – jbellis 2010-04-30 01:35:23

+1

所以不是地圖減少它的分佈點?如果它不在cassandra節點上運行,那有什麼意義? – UltimateBrent 2010-04-30 20:28:14

1

使用來自cassandra的直接InputFormat的勝利是它可以高效地傳輸數據,這是一個非常大的勝利。每個輸入分割都包含一系列令牌,並以全帶寬滾動磁盤:不需要查找,也不需要複雜的查詢。我不認爲它知道局部性 - 讓每個任務跟蹤器都喜歡來自同一節點上的cassandra進程的輸入拆分。

您可以嘗試使用Pig與STREAM方法作爲黑客,直到更直接的hadoop流支持到位。

1

它知道當地; Cassandra InputFormat覆蓋getLocations()以保留數據局部性