小编Mar*_*ria的帖子

通过远程 Spark 作业时出错:java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem

问题

我正在尝试使用 Spark HDInsight 集群 (HDI 4.0) 通过 IntelliJ 运行远程 Spark 作业。在我的 Spark 应用程序中,我尝试使用 Spark 的结构化流内置readStream函数从 Azure blob 存储中的 parquet 文件文件夹中读取输入流。

当我在连接到 HDInsight 群集的 Zeppelin 笔记本上运行该代码时,该代码按预期工作。但是,当我将 Spark 应用程序部署到集群时,遇到以下错误:

java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its superinterface org.apache.hadoop.hdfs.web.TokenAspect$TokenManagementDelegator

随后,我无法从 blob 存储中读取任何数据。

网上查到的一点信息表明,这是由于Spark和Hadoop之间的版本冲突引起的。2.4该应用程序使用为 Hadoop 预构建的Spark 运行2.7

使固定

为了解决这个问题,我通过 ssh 进入集群的每个头节点和工作节点,并手动将 Hadoop 依赖项降级为2.7.3from3.1.x以匹配本地spark/jars文件夹中的版本。完成此操作后,我就可以成功部署我的应用程序。无法将集群从 HDI 4.0 降级,因为它是唯一可以支持 Spark 的集群2.4

概括

总而言之,问题可能是我使用的是为 Hadoop 预构建的 Spark 下载吗2.7?有没有更好的方法来解决此冲突,而不是手动降级集群节点上的 Hadoop 版本或更改我正在使用的 Spark 版本?

hadoop scala apache-spark spark-structured-streaming azure-hdinsight

4
推荐指数
1
解决办法
9494
查看次数