Я пытался использовать соединитель Spark и пакет AAD для подключения к Azure SQL, как описано по ссылке ниже ...
https://docs.microsoft.com/en-us/azure/sql-database/sql-database-spark-connector#connect-spark-to-azure-sql-database-using-aad-authentication
но получаю ошибку независимо от использования типа аутентификации как «ActiveDirectoryPassword» или «accessToken».
При "accessToken" я получаю "сбой входа для пользователя" NT Authority \ Anonymous Logon ".. и с" ActiveDirectoryPassword "я получаю сообщение об ошибке типа: (Я могу успешно запустить импорт com.microsoft.aad .adal4j.AuthenticationException ... все еще не повезло).
java.lang.NoClassDefFoundError: com/microsoft/aad/adal4j/AuthenticationException
at com.microsoft.sqlserver.jdbc.SQLServerConnection.getFedAuthToken(SQLServerConnection.java:4035)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.onFedAuthInfo(SQLServerConnection.java:4011)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.processFedAuthInfo(SQLServerConnection.java:3980)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onFedAuthInfo(tdsparser.java:264)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:100)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4772)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3581)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:81)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3541)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2395)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2042)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1889)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1120)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:700)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:63)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:54)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:56)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:115)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:52)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:341)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:239)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:227)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:164)
at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:254)
at com.microsoft.azure.sqldb.spark.connect.DataFrameReaderFunctions.sqlDB(DataFrameReaderFunctions.scala:44)
... 55 elided
Следуйте инструкциям, приведенным на ссылке ниже:
https://docs.microsoft.com/en-us/azure/sql-database/sql-database-spark-connector#connect-spark-to-azure-sql-database-using-aad-authentication
Последующие шаги, чтобы воспроизвести проблему:
- Вращайте кластер HDInsight и открывайте пользовательский интерфейс Jupyter
Создайте новый блокнот с ядром Spark для команд Scala и выполните команду ниже:
%% configure -f
{"conf":
{
"spark.jars.packages": "com.microsoft.azure:azure-sqldb-spark:1.0.2,com.microsoft.azure:adal4j:1.6.3"
}
}
Затем запустите:
import com.microsoft.azure.sqldb.spark.config.Config
импорт com.microsoft.azure.sqldb.spark.connect._
импорт com.microsoft.aad.adal4j._
import com.microsoft.aad.adal4j.AuthenticationException
Далее:
val config = Config (Карта (
"url" -> "xxxxx.database.windows.net",
"databasename" -> "db1",
"dbtable" -> "dbo.BuildVersion",
"пользователь" -> "xyz@domain.com",
"пароль" -> "xxxxxxxx",
«аутентификация» -> «ActiveDirectoryPassword»,
"hostNameInCertificate" -> "* .database.windows.net",
"шифровать" -> "правда"
))
Чтобы прочитать приведенную выше таблицу, выполните:
val collection = spark.read.sqlDB (config)
Здесь появляется ошибка.
Ожидается получение результатов таблицы, но получение исключения.