当前位置: 首页 > 知识库问答 >
问题:

在Dataproc集群中使用AD认证写入AzureSQL时出现NoClassDefFoundError。但在本地工作正常

司立果
2023-03-14

我已经编写了Spark Scala代码。我有一个奇怪的问题,我能够在Dataproc集群中使用AD身份验证成功读取Azure SQL。但我在写入Azure SQL时出现以下错误。

NoClassDefFoundError: com/microsoft/aad/adal4j/AuthenticationException

我只有在Dataproc集群中运行时才收到此错误。相同的代码在我的本地机器上运行良好。

更清楚的是,我在阅读Dataproc时也遇到了同样的错误,我使用Maven shade插件重新定位冲突库,从而解决了这个问题。但现在我在写作时又犯了同样的错误。不确定出了什么问题。为什么在Dataproc中写入失败?请帮忙

代码示例:

正在读取Azure SQL(工作正常):

spark.read
      .format("com.microsoft.sqlserver.jdbc.spark")
      .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
      .option("encrypt", "false")
      .option("url", url)
      .option("database", database)
      .option("user", user)
      .option("password", password)
      .option("query",  query)
      .option("authentication", "ActiveDirectoryPassword")
      .load()

正在写入Azure SQL(Dataproc失败):

df.write
      .format("jdbc")
      .mode(mode)
      .option("url", url)
      .option("database", database)
      .option("user", user)
      .option("password", password)
      .option("dbtable",  table)
      .option("authentication", "ActiveDirectoryPassword")
      .save()

Maven Shade插件:

                            <relocation>
                                <pattern>com</pattern>
                                <shadedPattern>repackaged.com.microsoft</shadedPattern>
                                <includes>
                                    <include>com.microsoft.**</include>
                                </includes>
                            </relocation>

其他Azure依赖项:

<dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>msal4j</artifactId>
            <version>1.10.0</version>
        </dependency>

        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>adal4j</artifactId>
            <version>1.6.7</version>
        </dependency>

        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>spark-mssql-connector_2.12</artifactId>
            <version>1.2.0</version>
        </dependency>

共有1个答案

毋玺
2023-03-14

我通过在写操作中添加. ption("驱动程序","com.microsoft.sqlserver.jdbc.SQLServerDriver")解决了这个问题,并且成功了。发现此处突出显示的问题

 类似资料:
  • 问题内容: 我正在尝试使用JavaMail API发送电子邮件。我从自解压二进制文件在我的主目录中安装了jdk 1.5。我正在使用Ubintu 9.10 我使用下一条命令编译程序: 〜/ jdk1.5.0_22 / bin / javac -classpath〜/ jdk1.5.0_22 / jre / lib / javamail-1.4.3 / mail.jar:〜/ jdk1.5.0_22

  • 问题内容: 我正在使用gradle作为JavaFX插件。即使在 distribution /下 构建和运行可执行文件之后,一切都可以完美运行,但只有一类: 为了多种目的,我创建了以下对象: 在IDE中运行该程序没问题,一切正常。但是,如果我构建并尝试运行.exe文件,则会得到以下-StackTrace: 我真的不明白。怎么可能找不到这个类,而我所有其他的类却都找不到呢? 我的build.gradl

  • 我在WebSphere8.5.5上使用Quartz-2.2.3,在集群环境中,我有2个节点,每个节点上有3个JVM。 我正在应用程序启动时配置作业。 问题是作业在每个节点上配置一次,我希望它在两个节点上只配置一次,而不是每个节点上都配置一次。 我的配置如下: QuartzConfig.Properties: ApplicationContextListener:

  • 问题内容: 我已经包含了从Eclipse Android项目构建的JAR文件,并且在我的Android Studio项目中引用了它,如下所示: 这有效,并且我能够自动完成代码引用。当我编译APK时,一切都很好。我安装并运行,然后收到no class def错误: 但是,当我解压缩APK并使用dexdump查看classes.dex文件时,我看到上面的类存在。 为什么然后在运行时出现此类未找到错误?

  • 我正在使用PHP*TCPDF/FPDI类动态生成PDF。。 虽然本地发展(WAMP/localhost)... 现在我已经把东西上传到了直播服务器上。。我在同一个文件上只得到一张空白页。。使用相同的目录结构。。 但是,在实时环境中进行测试时。。它不起作用? 只是一个空白页,没有错误...等等。 这是我目前使用的代码。。 (我试图在构造函数和超文本标记语言输出中添加UTF-8编码...?? 代码:

  • 我尝试了本地minikube和kubeadm Kubernetes集群,并通过https://github.com/jenkinsci/kubernetes-plugin运行Jenkins服务器,并使用。 以下是了解这个问题的更多细节。