【问题标题】:Exception in running hadoop wordcount example in cassandra在 cassandra 中运行 hadoop wordcount 示例时出现异常
【发布时间】:2014-09-08 05:54:39
【问题描述】:

当我在 [https://github.com/apache/cassandra/tree/trunk/examples/hadoop_cql3_word_count]

中运行字数统计示例时,我有 2 个节点的集群并且我在这些节点上正确安装了 hadoop 和 cassandra

(首先运行 wordcountsetup,然后从 wordcount 创建 jar 并在 hadoop 中运行)我得到了异常:

Exception in thread "main" java.lang.NoClassDefFoundError: **com/datastax/driver/core/policies/LoadBalancingPolicy**
    at WordCount.run(WordCount.java:236)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at WordCount.main(WordCount.java:78)
    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.main(RunJar.java:212)
Caused by: java.lang.ClassNotFoundException: com.datastax.driver.core.policies.LoadBalancingPolicy
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 8 more

【问题讨论】:

  • 请提供您用来运行程序的命令?
  • 我通过这个在hadoop中运行jar:hadoop jar myJar.jar WordCountCassandra

标签: hadoop cassandra cql3 word-count datastax


【解决方案1】:

Mapreduce 程序主要有两个部分。 Driver 部分,Map/Reduce 部分。 Driver 部分将在您触发 mapreduce 程序的同一台机器上执行,而 Map/Reduce 部分将在您的任何从属节点中执行。在这里,您将面临 NoClassDefFoundError,这意味着在您的驱动程序代码或 Mapper/Reduce 代码中都无法访问类 com.datastax.driver.core.policies.LoadBalancingPolicy。 p>

如果您的驱动程序代码异常,则在执行 hadoop 命令之前设置环境变量。需要找到包含类 com.datastax.driver.core.policies.LoadBalancingPolicy 的 Jar,在占位符中指定 jar 完整路径

export HADOOP_CLASSPATH=<_JAR_NAME>;     # 

如果异常来自 Mapper/Reducer,上述选项将不起作用。在这种情况下,通过在您的 jar(myJar.jar) 中添加依赖 jar 来创建一个胖 jar

或者使用 hadoop -libjars 选项(需要在你的 Main 类中覆盖 ToolRunner 类)

【讨论】:

  • 感谢您的关注,我有一个问题:我应该在 hadoop-env.sh 文件中编辑 HADOOP_CLASSPATH 吗?此变量在我的系统中设置为 /opt/dsc-cassandra-2.0.7/lib/*:$HADOOP_CLASSPATH。
  • 无需修改您的 hadoop-env.sh,您可以在执行 hadoop jar 命令之前在命令行本身中覆盖此变量,以便它仅对该会话有效。但我更喜欢创建胖罐的第二种选择
  • 非常感谢,我将jar文件复制到/opt/dsc-cassandra/lib/并解决了我的问题,你的想法对我帮助很大。然后我有一个异常:java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class is expected.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2013-11-15
  • 2013-11-30
  • 2023-03-15
  • 2015-04-02
相关资源
最近更新 更多