你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure HDInsight 中,Apache Spark 作业因 InvalidClassException(类版本不匹配)而失败

本文介绍在 Azure HDInsight 群集中使用 Apache Spark 组件时出现的问题的故障排除步骤和可能的解决方案。

问题

尝试在 Spark 2.x 群集中创建 Apache Spark 作业。 它失败,出现类似于以下内容的错误:

18/09/18 09:32:26 WARN TaskSetManager: Lost task 0.0 in stage 1.0 (TID 1, wn7-dev-co.2zyfbddadfih0xdq0cdja4g.ax.internal.cloudapp.net, executor 4): java.io.InvalidClassException:
org.apache.commons.lang3.time.FastDateFormat; local class incompatible: stream classdesc serialVersionUID = 2, local class serialVersionUID = 1
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)

原因

此错误可能是由于向 spark.yarn.jars 配置中添加其他 JAR 导致的,具体来说是包含不同版本的 commons-lang3 包并引入类不匹配的阴影 JAR。 默认情况下,Spark 2.1/2/3 使用版本 3.5 的 commons-lang3

提示

为库添加阴影就是将其内容放入你自己的 jar 中,并更改其包。 这与打包库不同,后者是将库放入你自己的 jar 中,而不重新打包。

解决方法

删除 jar,或重新编译自定义 jar (AzureLogAppender),并使用 maven-shade-plugin 重新定位类。

后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:

  • 通过 Azure 社区支持获取 Azure 专家的解答。

  • 联系 @AzureSupport,这是用于改进客户体验的官方 Microsoft Azure 帐户。 它可以将 Azure 社区成员连接到适当的资源,为他们提供解答、支持和专家建议。

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持”,或打开“帮助 + 支持”中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Microsoft Azure 订阅中带有对订阅管理和计费支持的访问权限,技术支持通过 Azure 支持计划之一提供。