【问题标题】:Execute hive query on spark - java.lang.NoClassDefFoundError org/apache/hive/spark/client/Job在 spark 上执行 hive 查询 - java.lang.NoClassDefFoundError org/apache/hive/spark/client/Job
【发布时间】:2016-07-29 15:52:25
【问题描述】:

我试图让 Hive on Spark 正常工作,但它似乎没有加载 hive-exec-2.0.1.jar。 我可以让 Hive on mr 工作得很好。 我使用 Hive 2.0.1 和 Spark 1.6.1。遵循 Hive on Spark 教程。 我在 hive-site.xml 上设置了所有必要的属性,将 spark 程序集 jar 链接到 hive lib 文件夹中,我已经设置了所有环境变量(SPARK_HOME 等)。 我启动了 Spark master 和 worker。还以 DEBUG 级别启动了 hiveserver2。尝试运行一个简单的查询“select count(*)...”,据我在 hive 日志中看到,它执行 spark-submit 命令以及所有必要的参数,包括 hive-exec-2.0.1.jar文件,但我仍然看到在执行期间我得到:


16/07/29 18:14:51 [RPC-Handler-3]: WARN rpc.RpcDispatcher: Received error message:io.netty.handler.codec.DecoderException: java.lang.NoClassDefFoundError: org/apache/hive/spark/client/Job
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:358)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:230)
    at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/apache/hive/spark/client/Job
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:154)
    at org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:133)
    at org.apache.hive.com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:670)
    at org.apache.hive.com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:118)
    at org.apache.hive.com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:551)
    at org.apache.hive.com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:790)
    at org.apache.hive.spark.client.rpc.KryoMessageCodec.decode(KryoMessageCodec.java:97)
    at io.netty.handler.codec.ByteToMessageCodec$1.decode(ByteToMessageCodec.java:42)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:327)
    ... 15 more
Caused by: java.lang.ClassNotFoundException: org.apache.hive.spark.client.Job
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 39 more
.
16/07/29 18:14:51 [RPC-Handler-3]: WARN client.SparkClientImpl: Client RPC channel closed unexpectedly.

你知道如何解决这个问题吗? 我什么都试过了:设置 spark.jars 属性,链接 hive-exec-2.0.1.jar,设置 spark.executor..property 等等。

它似乎应该可以正常工作,但由于某种原因我无法让它工作......

还有什么?

【问题讨论】:

  • 您在$SPARK_HOME/conf 目录中有hive-site.xml 文件的副本吗?
  • 是的,HiveContext 启动成功
  • 看起来 spark 1.6.1 与 hive 1.2.1 兼容 - 你应该尝试将 hive 降级到 1.2.1 版本 - spark.apache.org/docs/1.6.1/…
  • 也试过了——同样的问题。似乎即使 spark-submit 添加了 hive-exec 文件,它仍然没有被添加到执行程序类路径中......还有其他想法吗?
  • 通过添加属性解决它:spark.driver.extraClassPath并指向:hive-exec-1.2.1.jar

标签: hadoop apache-spark hive


【解决方案1】:

当我在 cloudera VM 上设置 spark 时,我必须在将 hive-site.xml 复制到 $SPARK_HOME/conf 目录时进行这些更改:

$SPARK_HOME/conf/classpath.txt 文件中添加这些行:

/home/cloudera/spark-1.2.1-bin-hadoop2.4/lib/spark-1.2.1-yarn-shuffle.jar
/usr/jars/hive-exec-1.2.1.jar

$SPARK_HOME/conf/spark-default.conf 文件中添加此属性(与您复制到 hive lib 相同的程序集 jar - 我不需要将程序集 jar 复制到 hive lib。):

spark.yarn.jar=local:/home/cloudera/spark-1.2.1-bin-hadoop2.4/lib/spark-assembly-1.2.1-hadoop2.4.0.jar

还要检查classpath.txt文件中设置的hive的jars版本是否与你的相同,位置(绝对路径)也是有效的。

【讨论】:

    【解决方案2】:

    通过添加属性解决它:spark.driver.extraClassPath 并指向:hive-exec-1.2.1.jar

    【讨论】:

    • 在那之后我遇到了另一个问题:执行查询导致抛出 java.lang.AbstractMethodError 异常。最后兼容的版本是:Spark-1.6.2 和 Hive-2.0.1 或 Spark 1.4.1 和 Hive-1.2.1
    【解决方案3】:

    与 Hive 1.2 及更高版本兼容的 Spark 版本是 Spark 1.3.1。那是我唯一让它工作的,它已经准备好生产了。这不是基于任何供应商的版本。我在 Hortonworks 演讲中介绍了这一点。详情来自here

    HTH,

    密歇根

    【讨论】:

    • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
    猜你喜欢
    • 2016-01-18
    • 2019-06-07
    • 2021-08-10
    • 2016-07-11
    • 1970-01-01
    • 2018-07-14
    • 2017-03-10
    • 2020-08-31
    相关资源
    最近更新 更多