【问题标题】:Got AbstractMethodError when running Zeppelin Notebook运行 Zeppelin Notebook 时出现 AbstractMethodError
【发布时间】:2019-03-02 20:18:47
【问题描述】:

我在我的一个 Mesos slave 上安装了 Zeppelin 0.8(我们的 mesos 集群是一个 3 master + 5 slaves 集群。我们通常使用 Apache Marathon 来午餐我的 spark 工作。),在启动其中一个 spark 时我们遇到了以下异常通过 Zeppelin 工作。看起来它与 io.netty 不匹配有关。

我检查了我所有的 spark job fat jar,看起来他们使用的是 Netty 4.1.13,因为依赖于 Elastic Search 插件。

经过调查,我注意到一件事,只要我将我的 Spark job fat jar 添加到 Zeppelin 的 Spark 内核中,即使我正在运行 Zeppelin 教程,也会出现此错误。

我的 Spark 二进制文件安装在所有 Mesos 从站上,版本为 2.1.0。

如果这是由于 Netty 问题,当我使用 Apache Marathon 提交作业时,我的作业应该无法运行。但是,它仅在通过 Zeppelin 运行时才会失败。

谁能给我一些提示?提前致谢!

INFO [2018-09-27 01:13:41,532] ({Thread-26} Logging.scala[logInfo]:54) - Mesos task 2 is now TASK_RUNNING
ERROR [2018-09-27 01:13:43,778] ({shuffle-server-3-4} TransportRequestHandler.java[operationComplete]:201) - Error sending result RpcResponse{requestId=4631687762231387177, body=NioManagedBuffer{buf=java.nio.HeapByteBuffer[pos=0 lim=47 cap=64]}} to /10.128.96.44:44904; closing connection
java.lang.AbstractMethodError
at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73)
at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:107)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:810)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
at io.netty.handler.timeout.IdleStateHandler.write(IdleStateHandler.java:302)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
at io.netty.channel.AbstractChannelHandlerContext.access$1900(AbstractChannelHandlerContext.java:38)
at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.write(AbstractChannelHandlerContext.java:1089)
at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1136)
at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1078)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
at java.lang.Thread.run(Thread.java:748)

下面是我在 zeppelin-env.sh 中的配置。

export JAVA_HOME="/usr/lib/jvm/java-8-oracle"

export MESOS_NATIVE_JAVA_LIBRARY="/usr/lib/libmesos.so"

export MASTER="mesos://zk://10.128.96.35:2181,10.128.96.37:2181,10.128.96.39:2181,10.128.96.41:2181,10.128.96.43:2181/mesos" # Get the master zk string for your environment from RCS.

export ZEPPELIN_JAVA_OPTS="-Dspark.executor.memory=4g -Dspark.cores.max=2"

export ZEPPELIN_MEM="-Xms1024m -Xmx1024m -XX:MaxPermSize=512m"

export ZEPPELIN_INTP_MEM="-Xms1024m -Xmx1024m -XX:MaxPermSize=512m"

export SPARK_HOME="/usr/local/spark"

export SPARK_SUBMIT_OPTIONS="--driver-memory 1G --executor-memory 4G"

export SPARK_APP_NAME="Zeppelin"

【问题讨论】:

  • 我猜你的类路径中可能还有其他一些 jars,你能尝试使用另一个干净版本的 spark 吗?不需要在所有节点上都安装,在zeppelin主机上即可。

标签: apache-spark netty mesos apache-zeppelin


【解决方案1】:

看起来你在类路径上有一个 netty 4.0.x 和 4.1.x。你应该只有 4.1.x

【讨论】:

  • 谢谢@norman!我的班级路径中只有 4.1.X。不确定 Spark/Zeppelin 是否使用不同的。是否可以在 Spark 2.1.0 中将 Netty 更改为 4.0.X? (我在谷歌搜索后怀疑)。如果我将 Netty 完全排除在我的肥罐中,它会起作用吗?
【解决方案2】:

我的 build.sbt 中的一些代码可以解决这个问题。

assemblyExcludedJars in assembly := {
  val cp = (fullClasspath in assembly).value
  cp filter { entry =>
        entry.data.getName == "netty-all-4.1.10.Final.jar" ||
        entry.data.getName == "netty-buffer-4.1.13.Final.jar" ||
        entry.data.getName == "netty-codec-4.1.13.Final.jar" ||
        entry.data.getName == "netty-codec-http-4.1.13.Final.jar" ||
        entry.data.getName == "netty-common-4.1.13.Final.jar" ||
        entry.data.getName == "netty-handler-4.1.13.Final.jar" ||
        entry.data.getName == "netty-resolver-4.1.13.Final.jar"  ||
        entry.data.getName == "netty-transport-4.1.13.Final.jar" }
}

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 2016-07-15
    • 2015-12-29
    • 1970-01-01
    • 2017-09-03
    • 2017-01-29
    • 2021-04-02
    • 2011-05-28
    相关资源
    最近更新 更多