#scala #hadoop #scalding
#scala #hadoop #ошпаривание
Вопрос:
Пожалуйста, помогите запустить руководство по ошпариванию. У меня есть Hadoop 2.2, запущенный на одном узле, и я пытаюсь запустить руководство по ошпариванию:https://github.com/Cascading/scalding-tutorial / После успешного создания ‘fat jar’ с помощью этих команд:
$ git clone git://github.com/Cascading/scalding-tutorial.git
$ cd scalding-tutorial
$ sbt assembly
Я пытаюсь запустить учебные примеры, как предложено, с помощью этой команды:
$ yarn jar target/scalding-tutorial-0.8.11.jar <TutorialPart> --local <addtional arguments>
Оба —local и —hdfs не работают с java.lang.ClassNotFoundException:
$ yarn jar target/scala-2.9.3/scalding-assembly-0.10.0.jar 1 --local
Exception in thread "main" java.lang.ClassNotFoundException: 1
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
$ yarn jar target/scala-2.9.3/scalding-assembly-0.10.0.jar 1 --hdfs
Exception in thread "main" java.lang.ClassNotFoundException: 1
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
Обновить
Изменение аргумента команды на ‘Tutorial1’, ‘Tutorial0’ также не помогает:
$ yarn jar target/scala-2.9.3/scalding-assembly-0.10.0.jar Tutorial1 --local
Exception in thread "main" java.lang.ClassNotFoundException: Tutorial1
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
$ yarn jar target/scala-2.9.3/scalding-assembly-0.10.0.jar Tutorial0 --local
Exception in thread "main" java.lang.ClassNotFoundException: Tutorial0
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
Ответ №1:
Вы передаете неправильное имя для основного класса, поэтому он не может его найти. Это должно быть Tutorial1
вместо просто 1
. Вы можете увидеть ошибку в трассировке стека:
Exception in thread "main" java.lang.ClassNotFoundException: 1
Класс не вызывается 1
. Попробуйте:
$ yarn jar target/scala-2.9.3/scalding-assembly-0.10.0.jar Tutorial1 --local
РЕДАКТИРОВАТЬ: для меня это отлично работает с этой командой:
$ yarn jar target/scalding-tutorial-0.8.11.jar Tutorial1 --local
Комментарии:
1. Спасибо, имеет смысл! К сожалению, изменение аргумента команды на ‘Tutorial1’, ‘Tutorial0’ также не помогает, пожалуйста, смотрите «обновление» в моем вопросе.
2. Я только что выполнил шаги руководства, и у меня это сработало… После их просмотра я заметил одну вещь: jar должен быть расположен в
target/scalding-tutorial-0.8.11.jar
, а не вtarget/scala-2.9.3/scalding-assembly-0.10.0.jar
. Может ли это быть ошибкой? Я отредактировал свой пост с помощью точной команды, которую я использую.3. Не в моем случае, все равно возникает та же ошибка, независимо от того, куда я поместил этот jar. Еще одна идея: у меня нет JAVA_HOME и JAVA_CLASSPATH, может ли это быть так?
4. Ошибка здесь заключается в том, что он не может найти класс, который вы указываете, так что это не должно быть проблемой… Но что я нахожу странным, так это то, что jar, созданный в вашем случае, имеет другое имя и находится в другой папке. Не могли бы вы удалить его и вызвать
sbt assembly
снова? Вы сказали «неважно, куда я поместил этот jar», но дело не только в местоположении, в вашей команде имя jar было другим.5. Но в моем случае
sbt assembly
(послеsbt update clean
) создается одинscalding/target/scala-2.9.3/scalding-assembly-0.10.0.jar
файл. Почему он не создаетсяtarget/scalding-tutorial-0.8.11.jar
? Как его создать?