2012-09-25 85 views
4

我需要在我的Cassandra集羣上執行MapReduce,包括數據局部性,即。每個作業僅查詢屬於作業運行的本地Casandra節點的行。Cassandra和MapReduce - 最低設置要求

有關如何在較舊的Cassandra版本(0.7)上設置Hadoop for MR的教程。我無法找到當前版本。

這方面0.7以來有什麼變化?

最小化設置(Hadoop + HDFS + ...)需要什麼軟件模塊?

我需要Cassandra Enterprise嗎?

回答

13

卡桑德拉包含幾類這些都足以與Hadoop的集成:

  • ColumnFamilyInputFormat - 這是一個Map函數的輸入,它可以在使用Cassandra的隨機分區時讀取單個CF中的所有行,也可以在與Cassandra的有序分區器一起使用時讀取行範圍。 Cassandra集羣具有環形形式,其中每個環形部分負責具體的鍵範圍。輸入格式的主要任務是將Map輸入分爲可並行處理的數據部分 - 這些部分被稱爲InputSplits。在Cassandra的情況下,這很簡單 - 每個環範圍都有一個主節點,這意味着輸入格式將爲每個環元素創建一個InputSplit,並且將導致一個Map任務。現在我們想在存儲數據的同一臺主機上執行我們的Map任務。每個InputSplit都會記住其環部分的IP地址 - 這是負責該特定鍵範圍的Cassandra節點的IP地址。 JobTracker將創建地圖任務表InputSplits並將它們分配給TaskTracker執行。 JobTracker將嘗試找到TaskTracker,它具有與InputSplit相同的IP地址 - 基本上我們必須在Cassandra主機上啓動TaskTracker,這將保證數據的局部性。
  • ColumnFamilyOutputFormat - 爲Reduce功能配置上下文。因此結果可以存儲在Cassandra中
  • 所有Map函數的結果必須在它們傳遞給reduce函數之前合併在一起 - 這稱爲shuffle。它使用本地文件系統 - 從Cassandra的角度來看,這裏不需要做任何事情,我們只需要配置到本地臨時目錄的路徑。此外,沒有必要用其他方法替代此解決方案(如堅持Cassandra) - 此數據不必複製,Map任務是冪等的。

基本上使用提供Hadoop的集成放棄可能性數據所在執行上的主機地圖作業,減少功能可以存儲結果返回到卡桑德拉 - 這是我所需要的。

有執行兩種可能的map-reduce:

  • org.apache.hadoop.mapreduce.Job - 這個類的一個過程模擬的Hadoop。它執行Map-Resuce任務,不需要任何附加服務/依賴關係,只需訪問臨時目錄即可存儲來自映射作業的結果以進行隨機播放。基本上我們必須在Job類中調用幾個setter,它包含像Map任務,Reduce任務,輸入格式,Cassandra連接等類的名稱,安裝完成後必須調用job.waitForCompletion(true) - 它會啓動Map-Reduce任務並等待結果。此解決方案可用於快速進入Hadoop世界並進行測試。它不會擴展(單個進程),並且它會通過網絡獲取數據,但仍然 - 開始時會很好。
  • 真正的Hadoop集羣 - 我沒有設置它,但據我瞭解,從前面的例子的Map-Reduce作業將工作得很好。我們還需要HDFS,它將用於分發Hadoop集羣中包含Map-Reduce類的jar。
3

是的,我一直在尋找同樣的事情,似乎DataStaxEnterprise具有簡化Hadoop的整合, 閱讀本http://wiki.apache.org/cassandra/HadoopSupport

+2

DataStax Enterprise確實簡化了Cassandra/Hadoop集成,每個節點花費約8000英鎊。 – felbus