Проблема с опцией Hadoop Streaming -file для файлов классов Java - PullRequest
2 голосов
/ 22 июля 2011

Я борюсь с очень простой проблемой в hadoop потоковая передача в опции "-file".

Сначала я попробовал самый простой пример потоковой передачи:

hadoop @ ubuntu: / usr / local / hadoop $ bin / hadoop jar contrib / streaming / hadoop-streaming-0.20.203.0.jar -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ -reducer / bin / wc -inputformat KeyValueTextInputFormat -input gutenberg / * -output Гутенберг-outputtstchk22

, который работал абсолютно нормально.

Затем я скопировал исходный код IdentityMapper.java и скомпилировал его. Затем я поместил этот файл класса в папку / home / hadoop и выполнил следуя в терминале.

hadoop @ ubuntu: / usr / local / hadoop $ bin / hadoop jar contrib / streaming / hadoop-streaming-0.20.203.0.jar -file ~ / IdentityMapper.class -mapper IdentityMapper.class \ -reducer / bin / wc -inputformat KeyValueTextInputFormat -input gutenberg / * -output Гутенберг-outputtstch6

Не удалось выполнить следующую ошибку в файле stderr:

java.io.IOException: не удается запустить программу "IdentityMapper.class": java.io.IOException: ошибка = 2, нет такого файла или каталога

Затем я снова попробовал, скопировав файл IdentityMapper.class в установил hadoop и выполнил следующее:

hadoop @ ubuntu: / usr / local / hadoop $ bin / hadoop jar contrib / streaming / hadoop-streaming-0.20.203.0.jar -file IdentityMapper.class -mapper IdentityMapper.class \ -reducer / bin / wc -inputformat KeyValueTextInputFormat -input gutenberg / * -output Гутенберг-outputtstch5

Но, к сожалению, снова я получил ту же ошибку.

Было бы замечательно, если бы вы могли помочь мне, потому что я не могу двигаться дальше без преодоления этого.

Благодарю вас в ожидании.

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Тот же ответ, что и для вашего другого вопроса , вы не можете использовать -file для отправки через jar, так как hadoop не поддерживает несколько jar (которых еще не было в CLASSPATH), отметьте потоковые документы :

По крайней мере, начиная с версии 0.14, Hadoop не поддерживает несколько файлов JAR.Таким образом, при указании ваших собственных пользовательских классов вы должны будете упаковать их вместе с потоковым jar и использовать пользовательский jar вместо стандартного потокового jar hadoop.

1 голос
/ 23 июля 2013

Я встретил подобную проблему. И добавление файла JAR в HADOOP_CLASSPATH устранило проблему. Более подробная информация, пожалуйста, отсылайте это: http://blog.cloudera.com/blog/2011/01/how-to-include-third-party-libraries-in-your-map-reduce-job/

1 голос
/ 22 июля 2011

Почему вы хотите скомпилировать класс?Это уже скомпилировано в баночках от hadoop.Вы просто передаете имя класса (org.apache.hadoop.mapred.lib.IdentityMapper), потому что Hadoop использует отражение для создания нового экземпляра этого класса отображения.

Вы должны убедиться, что это лежит в пути к классам, например, в банке, в которой вы проходите работу.

...