2012-08-15 41 views
4

我有大量的Hadoop SequenceFiles,我想在AWS上使用Hadoop進行處理。我現有的大部分代碼都是用Ruby編寫的,因此我想在Amazon EMR上使用Hadoop Streaming以及我自定義的Ruby Mapper和Reducer腳本。使用SequenceFile進行Hadoop流式處理(在AWS上)

我找不到有關如何將Sequence文件與Hadoop Streaming集成的文檔,以及如何將輸入提供給我的Ruby腳本。我很欣賞一些關於如何啓動作業的指令(直接在EMR上,或者只是一個普通的Hadoop命令行),以利用SequenceFiles以及關於如何期望將數據提供給我的腳本的一些信息。

- 編輯:我以前曾經錯誤地提到了StreamFiles而不是SequenceFiles。我認爲我的數據文件不正確,但道歉。改變後的答案很簡單。

+0

您是否試過[Mandy](https://github.com/forward/mandy)框架?我已經使用了好幾個月了,對我來說效果很好。 – Edenbauer 2012-08-15 11:53:45

回答

1

答案是將輸入格式指定爲Hadoop的命令行參數。

-inputformat SequenceFileAsTextInputFormat

機會是你想要的SequenceFile文本,但也有SequenceFileAsBinaryInputFormat如果那是比較合適的。

0

不知道這是否是你問什麼,但該命令使用紅寶石地圖縮小與Hadoop的命令行腳本會是這個樣子:

% hadoop jar $HADOOP_INSTALL/contrib/streaming/hadoop-*-streaming.jar \ 
    -input input/ncdc/sample.txt \ 
    -output output \ 
    -mapper ch02/src/main/ruby/max_temperature_map.rb \ 
    -reducer ch02/src/main/ruby/max_temperature_reduce.rb 

你可以(也應該)使用一個具有大數據集的組合器。將其與-combiner選項一起添加。組合器輸出將直接送入你的映射器(但不能保證這將被調用多少次,如果有的話)。否則,您的輸入被分割(根據標準的hadoop協議)並直接輸入到您的映射器中。這個例子來自O'Reily的Hadoop:The Definitive Guide 3rd Edition。它具有一些關於流式傳輸的非常好的信息,以及專門用於使用ruby進行流式傳輸的部分

相關問題