【问题标题】:How to resolve NoClassDefFoundError while using Hadoop?使用 Hadoop 时如何解决 NoClassDefFoundError?
【发布时间】:2016-08-21 06:37:56
【问题描述】:

我来了

线程“主”java.lang.NoClassDefFoundError 中的异常:com/linkedin/camus/etl/IEtlKey。

在运行命令时:

hadoop jar camus-etl-kafka-0.1.0-SNAPSHOT.jar 
com.linkedin.camus.etl.kafka.CamusJob -P camus.properties

我得到以下例外..

2016-04-27 11:34:04.622 java[13567:351959] Unable to load realm mapping info from SCDynamicStore
[NativeCodeLoader] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.NoClassDefFoundError: com/linkedin/camus/etl/IEtlKey
    at com.linkedin.camus.etl.kafka.CamusJob.run(CamusJob.java:252)
    at com.linkedin.camus.etl.kafka.CamusJob.run(CamusJob.java:235)
    at com.linkedin.camus.etl.kafka.CamusJob.run(CamusJob.java:691)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at com.linkedin.camus.etl.kafka.CamusJob.main(CamusJob.java:646)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: com.linkedin.camus.etl.IEtlKey

我已将camus-example-0.1.0-SNAPSHOT-shaded.jar 包含在类路径中。

如果我遗漏了什么,请告诉我。

提前致谢

苏米亚吉特

【问题讨论】:

    标签: java hadoop noclassdeffounderror camus


    【解决方案1】:

    你应该尝试包含camus-api,你可以在这个LinkedIn's previous generation Kafka to HDFS pipeline页面上找到,因为缺少的类包含在这个包中,你可以看到here

    注意 Camus 可能需要的其他传递依赖项。

    另外,为了确保当您从命令行使用hadoop jar 时可以在类路径中找到类,您可以添加libjars 命令行选项,如Using the libjars option with Hadoop 中所述:

    $ export LIBJARS=/path/jar1,/path/jar2
    $ hadoop jar my-example.jar com.example.MyTool -libjars ${LIBJARS} -mytoolopt value
    

    知道加缪将被哥布林取代可能会很有用:

    加缪正在被地精淘汰并取而代之。对于那些使用或 对 Camus 感兴趣,建议去 Gobblin 看看。

    有关从 Camus 迁移到 Gobblin 的说明,请采取 看看Camus Gobblin Migration

    【讨论】:

    • 嗨.. 感谢您的建议。我已经在类路径中添加了 camus-api,但仍然没有运气..如果我遗漏了什么,请告诉我..
    • 是的。实际上,当我从 IDE 运行时,它并没有给出异常。但是当我试图从终端运行它时,它给出了同样的异常。
    猜你喜欢
    • 2012-02-07
    • 2021-11-06
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多