2011-07-22 41 views
2

我在「-file」選項中的hadoop 流式處理中遇到了一個非常基本的問題。Java類文件的Hadoop Streaming -file選項存在問題

首先,我試圖在流的非常簡單的例子:

Hadoop的@ Ubuntu的:在/ usr /本地/ Hadoop的$斌/ Hadoop的罐子 的contrib /流/ Hadoop的流-0.20.203.0.jar -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ -reducer /斌/ WC -inputformat KeyValueTextInputFormat - 輸入古滕貝格/ * - 輸出 古騰堡outputtstchk22

這工作絕對沒問題。

然後我複製了IdentityMapper.java源代碼並編譯它。 然後我將這個類文件放在/ home/hadoop文件夾中,並在終端中執行下面的 。

Hadoop的@ Ubuntu的:在/ usr /本地/ Hadoop的$斌/ Hadoop的罐子 的contrib /流/ Hadoop的流式0.20.203.0.jar -file 〜/ IdentityMapper.class -mapper IdentityMapper.class \ -reducer /斌/ WC -inputformat KeyValueTextInputFormat - 輸入古滕貝格/ * - 輸出 古騰堡outputtstch6

執行失敗與stderr文件以下錯誤:

產生java.io.IOException:不能運行程序「IdentityMapper。類「: java.io.IOException:error = 2,沒有這樣的文件或目錄

再說我嘗試通過在 Hadoop的安裝複製IdentityMapper.class文件並執行以下操作:

Hadoop的@ Ubuntu的:在/ usr /本地/ Hadoop的$斌/ Hadoop的罐子 的contrib /流/ Hadoop的流-0.20.203.0.jar -file IdentityMapper.class -mapper IdentityMapper.class \ -reducer /斌/ WC -inputformat KeyValueTextInputFormat - 輸入古滕貝格/ * - 輸出 古騰堡outputtstch5

但不幸的是,我再次得到了同樣的錯誤。

這將是偉大的,如果你能幫助我,因爲我不能移動任何進一步 沒有克服這一點。

感謝您的期待。

回答

1

爲什麼要編譯該類?它已經被編譯在hadoop罐子裏。您只是傳遞類名(org.apache.hadoop.mapred.lib.IdentityMapper),因爲Hadoop使用反射來實例化此映射類的新實例。

您必須確保它位於類路徑中,例如在一個罐子裏,你正在通過這項工作。

+0

感謝您的回覆,我知道jar已經存在,我嘗試了這個之後,我嘗試了hadoop流爲一個不同的類文件失敗,所以以確定是否有東西錯誤的類文件本身或與我使用它的方式 –

1

相同的答案爲您other question,你不能真正使用-file送過來瓶當Hadoop的不支持多瓶(即不是已經在CLASSPATH),檢查streaming docs

至少遲到0.14版本,Hadoop不支持多個jar文件。因此,在指定自己的自定義類時,您必須將它們與流式jar一起打包,並使用自定義jar而不是默認的hadoop流式jar。

+0

謝謝,但即使我正在嘗試類文件(而不是罐),我得到相同的錯誤,詳細如下:我在終端上執行以下命令: hadoop @ ubuntu:/ usr/local/hadoop $ bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -file /home/hadoop/codes/MapperTst.class -mapper/home/hadoop/codes /MapperTst.class -file /home/hadoop/codes/ReducerTst.class -reducer /home/hadoop/codes/ReducerTst.class -input gutenberg/* -output gutenberg-outputtstch27 –

+0

我很確定它有相同的底層問題。你需要將你的自定義類打包到自定義的hadoop-streaming.jar中,並以這種方式傳遞它。 – cftarnas

+0

但我想知道是否不允許通過文件選項發送罐子或類文件我將如何能夠通過任何庫可能需要的映射也我認爲hadoop打包發送通過發送的任何文件通過作業jar中的-file選項....請教 –