简体   繁体   English

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

[英]Unable to connect Azure SQL DB in Spark YARN Cluster using Java using azure-activedirectory-library-for-java library

In one of our project, we are using Azure SQL DB, authentication mode is Access Token based. 在我们的项目之一中,我们正在使用Azure SQL DB,身份验证模式是基于访问令牌的。 We are using Spark Java to connect. 我们正在使用Spark Java进行连接。 We are able to connect to DB when we run our spark job as standalone but when we are running in YARN mode, we are not able to connect. 当我们独立运行spark作业时,我们能够连接到DB,但是当我们以YARN模式运行时,我们将无法连接。 We are using the library “azure-activedirectory-library-for-java” 我们正在使用库“ azure-activedirectory-library-for-java”

We are getting the error as: Login failed for user: ''. 我们收到以下错误消息:用户“”登录失败。 ClientConnectionId: ClientConnectionId:

Exception: INFO Client: client token: N/A diagnostics: User class threw exception: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ''. 异常:INFO客户端:客户端令牌:N / A诊断:用户类引发异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 ClientConnectionId:2b288e9e-15cc-448a-8210-0d184d27a12b ApplicationMaster host: 172.25.3.7 ApplicationMaster RPC port: 0 queue: default start time: 1538583454649 final status: FAILED tracking URL: ClientConnectionId:2b288e9e-15cc-448a-8210-0d184d27a12b ApplicationMaster主机:172.25.3.7 ApplicationMaster RPC端口:0队列:默认开始时间:1538583454649最终状态:FAILED跟踪URL:

References: 参考文献:

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

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

Thanks in advance. 提前致谢。

Thanks & Regards, 感谢和问候,

-Venkat -Venkat

Below is the exception stacktrace: 以下是异常堆栈跟踪:

18/10/08 10:07:16 WARN SparkSession$Builder: Using an existing SparkSession; 18/10/08 10:07:16 WARN SparkSession $ Builder:使用现有的SparkSession; some configuration may not take effect. 某些配置可能不会生效。 18/10/08 10:07:16 ERROR ApplicationMaster: User class threw exception: com.microsoft.sqlserver.jdbc.SQLServerException: 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: Login failed for user ''. ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 com.microsoft.sqlserver.jdbc.SQLServerException:用户``登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217) at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:251) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:81) at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:3077) at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2360) at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43) at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2346) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:6276) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1793) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1404) at com.microsoft.sqlserver.jdbc.SQLServerConnection.log 在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)处的com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)处的ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6在com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:3077)上的com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:81)(com.microsoft.sqlserver.jdbc.SQLServerConnection.logon( com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 100(SQLServerConnection.java:43)处com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2346)处的SQLServerConnection.java:2360)。 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1793)上的microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:6276)com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection。 java:1404),网址为com.microsoft.sqlserver.jdbc.SQLServerConnection.log in(SQLServerConnection.java:1068) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:904) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:451) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1014) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:61) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:52) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:58) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:114) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:52) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309) at org.apache.spark.sql.DataFrameReader.load(DataFrameRead com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:904)(com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:451)处的(SQLServerConnection.java:1068)位于org.apache的org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $$ anonfun $ createConnectionFactory $ 1.apply(JdbcUtils.scala:61)上的.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1014) .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.DataFrameReader.load(DataFrameRead)在org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309) er.scala:178) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146) at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:193) at com.microsoft.azure.sqldb.spark.connect.DataFrameReaderFunctions.sqlDB(DataFrameReaderFunctions.scala:44) at com.sew.data.SQLDBConnectionEngine$.main(SQLDBConnectionEngine.scala:71) at com.sew.data.SQLDBConnectionEngine.main(SQLDBConnectionEngine.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$3.run(ApplicationMaster.scala:646) 18/10/08 10:07:16 INFO ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class threw exception: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ''. er.scala:178)位于org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)位于org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:193)位于com.microsoft.azure com.sew.data.SQLDBConnectionEngine $ .main(SQLDBConnectionEngine.scala:71)上的.sqldb.spark.connect.DataFrameReaderFunctions.sqlDB(DataFrameReaderFunctions.scala:44)在com.sew.data.SQLDBConnectionEngine.main(SQLDBConnectionEngine.scala)在java.lang.reflect.Method处sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .invoke(Method.java:498)at org.apache.spark.deploy.yarn.ApplicationMaster $$ anon $ 3.run(ApplicationMaster.scala:646)18/10/08 10:07:16 INFO ApplicationMaster:最终应用程序状态:失败,退出代码:15,(原因:用户类抛出异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6) 18/10/08 10:07:16 INFO SparkContext: Invoking stop() from shutdown hook 18/10/08 10:07:16 INFO AbstractConnector: Stopped Spark@683861d4{HTTP/1.1,[http/1.1]}{0.0.0.0:0} ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6)18/10/08 10:07:16 INFO SparkContext:从关机钩中调用stop()18/10/08 10:07:16 INFO AbstractConnector:Stopped Spark @ 683861d4 { HTTP / 1.1,[HTTP / 1.1]} {} 0.0.0.0:0

The issue is Login failed for user ''. 问题是Login failed for user ''. and I don't see a user name that the login is attempting to use? 我没有看到该登录名试图使用的用户名?

18/10/08 10:07:16 ERROR ApplicationMaster: User class threw exception: com.microsoft.sqlserver.jdbc.SQLServerException: 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: Login failed for user ''. ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 com.microsoft.sqlserver.jdbc.SQLServerException: 用户``登录失败。 ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError ClientConnectionId:8ecbc2ae-cede-4b1d-8eba-f362010f71e6 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError

What user are you attempting to connect as? 您尝试以什么用户身份连接? Has this identify been added as a 'contained database user' per the instructions for creating Azure Active Directory: 是否按照创建Azure Active Directory的说明将此标识添加为“包含的数据库用户”:

Create and populate an Azure AD 创建并填充Azure AD

If the above set of steps have been complete properly, you then move on to: 如果上述步骤已正确完成,则继续进行以下操作:

Connecting using Access Token 使用访问令牌进行连接

Setup Requirement 设置要求

If you are using the access token-based authentication mode, you need to download azure-activedirectory-library-for-java and its dependencies, and include them in the Java build path. 如果使用的是基于访问令牌的身份验证模式,则需要下载java的azure-activedirectory-library-for及其依赖项,并将其包含在Java构建路径中。

See Use Azure Active Directory Authentication for authentication with SQL Database to learn how to get access token to your Azure SQL database. 请参阅将Azure Active Directory身份验证用于SQL数据库身份验证,以了解如何获取对Azure SQL数据库的访问令牌。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM