无法使用Azure-activedirectory-library-for-java库使用Java在Java上连接Spark YARN群集中的Azure SQL DB

时间:2018-10-06 18:57:07

标签: java apache-spark azure-sql-database azure-active-directory adal

在我们的项目之一中,我们正在使用Azure SQL DB,身份验证模式基于访问令牌。我们正在使用Spark Java进行连接。当我们独立运行spark作业时,我们能够连接到DB,但是当我们以YARN模式运行时,我们将无法连接。 我们正在使用“ azure-activedirectory-library-for-java”库

我们收到以下错误消息:用户“'”登录失败。 ClientConnectionId:

例外: INFO客户端:          客户令牌:N / A          诊断:用户类引发异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 ClientConnectionId:2b288e9e-15cc-448a-8210-0d184d27a12b          ApplicationMaster主机:172.25.3.7          ApplicationMaster RPC端口:0          队列:默认          开始时间:1538583454649          最终状态:失败          跟踪网址:

参考文献:

https://github.com/Azure/azure-sqldb-spark

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-spark-connector

谢谢。

感谢与问候,

-Venkat

以下是异常堆栈跟踪:

18/10/08 10:07:16 WARN SparkSession $ Builder:使用现有的SparkSession;某些配置可能不会生效。 18/10/08 10:07:16错误ApplicationMaster:用户类引发异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户''登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6     在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)     在com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:251)     在com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:81)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:3077)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2360)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 100(SQLServerConnection.java:43)     在com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2346)     在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:6276)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1793)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1404)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1068)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:904)     在com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:451)     在com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1014)     在org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $$ anonfun $ createConnectionFactory $ 1.apply(JdbcUtils.scala:61)     在org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $$ anonfun $ createConnectionFactory $ 1.apply(JdbcUtils.scala:52)     在org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD $ .resolveTable(JDBCRDD.scala:58)     在org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation。(JDBCRelation.scala:114)     在org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:52)处     在org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309)     在org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)     在org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)     在org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:193)     在com.microsoft.azure.sqldb.spark.connect.DataFrameReaderFunctions.sqlDB(DataFrameReaderFunctions.scala:44)     在com.sew.data.SQLDBConnectionEngine $ .main(SQLDBConnectionEngine.scala:71)     在com.sew.data.SQLDBConnectionEngine.main(SQLDBConnectionEngine.scala)     在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处     在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)     在org.apache.spark.deploy.yarn.ApplicationMaster $$ anon $ 3.run(ApplicationMaster.scala:646) 18/10/08 10:07:16 INFO ApplicationMaster:最终应用程序状态:失败,exitCode:15,(原因:用户类抛出异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。ClientConnectionId: 8ecbc2ae-cede-4b1d-8eba-f362010f71e6) 18/10/08 10:07:16 INFO SparkContext:从关机挂钩调用stop() 18/10/08 10:07:16 INFO AbstractConnector:已停止Spark @ 683861d4 {HTTP / 1.1,[http / 1.1]} {0.0.0.0:0}

1 个答案:

答案 0 :(得分:0)

问题是Login failed for user ''.,我看不到该登录名试图使用的用户名吗?

18/10/08 10:07:16错误ApplicationMaster:用户类引发异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户”登录失败。 ClientConnectionId:8ecbc2ae-cede -4b1d-8eba-f362010f71e6 com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6位于com.microsoft.sqlserver.jdbc。 SQLServerException.makeFromDatabaseError

您尝试以什么用户身份连接?是否已按照创建Azure Active Directory的说明将此标识添加为“包含的数据库用户”:

Create and populate an Azure AD

如果上述步骤已正确完成,请继续进行以下操作:

Connecting using Access Token

设置要求

如果您使用的是基于访问令牌的身份验证模式,则需要下载azure-activedirectory-library-for-java及其依赖项,并将其包含在Java构建路径中。

请参见Use Azure Active Directory Authentication for authentication with SQL Database,以了解如何获取对Azure SQL数据库的访问令牌。