【问题标题】:Scalding tutorial: java.lang.ClassNotFoundException烫伤教程:java.lang.ClassNotFoundException
【发布时间】:2014-07-02 12:42:41
【问题描述】:

请帮助运行烫伤教程。 我在单个节点上运行 Hadoop 2.2 并尝试运行 Scalding 教程: 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)

【问题讨论】:

    标签: scala hadoop scalding


    【解决方案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
    

    【讨论】:

    • 谢谢,有道理!不幸的是,将命令参数更改为“Tutorial1”、“Tutorial0”也无济于事,请参阅我的问题中的“更新”。
    • 我刚刚按照教程的步骤进行操作,它确实对我有用...我在浏览完之后注意到一件事,jar 应该位于target/scalding-tutorial-0.8.11.jar,而不是@987654328 @。这可能是错误吗?我已经用我正在使用的确切命令编辑了我的帖子。
    • 不是在我的情况下,仍然有同样的错误,不管我把这个罐子放在哪里。另一个想法:我没有设置 JAVA_HOME 和 JAVA_CLASSPATH,可能是这样吗?
    • 这里的错误是它找不到你指定的类,所以这不应该是问题......但我觉得奇怪的是你的情况下生成的 jar 有不同的名称和位于不同的文件夹中。你能把它删掉再打电话sbt assembly吗?你说“不管我把这个罐子放在哪里”,但这不仅仅是位置,在你的命令中罐子名称不同。
    • 但在我的情况下,sbt assembly(在sbt update clean 之后)会生成一个scalding/target/scala-2.9.3/scalding-assembly-0.10.0.jar 文件。为什么它不构建target/scalding-tutorial-0.8.11.jar?如何构建它?
    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多