远程spark作业出错:java.lang.illegalaccesserror:class org.apache.hadoop.hdfs.web.hftpfilesystem

h4cxqtbf  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(1284)

问题

我正试图通过intellij和spark hdinsight cluster(hdi4.0)运行一个远程spark作业。在我的spark应用程序中,我尝试使用spark内置的结构化流从azure blob存储中的Parquet文件文件夹读取输入流 readStream 功能。
当我在连接到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之间的版本冲突造成的。应用程序使用spark运行 2.4 为hadoop预构建 2.7 .

修复

为了解决这个问题,我使用ssh连接到集群的每个head和worker节点,并手动将hadoop依赖关系降级为 2.7.33.1.x 以匹配本地版本 spark/jars 文件夹。这样做之后,我就可以成功地部署我的应用程序了。将集群从hdi4.0降级不是一个选项,因为它是唯一一个支持spark的集群 2.4 .

摘要

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

s2j5cfk0

s2j5cfk01#

在对以前尝试的一些方法进行故障排除之后,我遇到了以下修复:
在我的 pom.xml 我排除了 hadoop-client 依赖项由 spark-core jar。此依赖关系的版本为 2.6.5 与集群版本的hadoop冲突。相反,我导入所需的版本。

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version.major}</artifactId>
            <version>${spark.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
</dependency>

在进行此更改之后,我遇到了错误 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0 . 进一步的研究表明,这是由于本地机器上的hadoop配置问题造成的。根据本文的建议,我修改了 winutils.exe 我的版本 C://winutils/bin 是我要求的版本,还添加了相应的 hadoop.dll . 在做了这些更改之后,我能够像预期的那样成功地从blob存储中读取数据。
tldr问题是自动导入的 hadoop-client 通过排除它并添加新的 winutils.exe 以及 hadoop.dll 低于 C://winutils/bin .
这不再需要降级hdinsight集群中的hadoop版本或更改我下载的spark版本。

to94eoyn

to94eoyn2#

问题:在hadoop3.x集群上运行hadoop2.7和spark2.4的fatjar时,我遇到了同样的问题,我使用的是maven shade插件。
观察:在构建fatjar时,它包含jar org.apache。hadoop:hadoop-hdfs:jar:2.6.5 which 有org.apache.hadoop.hdfs.web.hftpfilesystem类。这在hadoop3中引起了问题
解决方案:我在构建fat jar时排除了这个jar,如下所示。

相关问题