Доступ к хранилищу озера данных Azure gen2 из Scala - PullRequest
0 голосов
/ 20 апреля 2019

Я могу подключиться к ADLS gen2 из ноутбука, работающего на базе данных Azure, но не могу подключиться из задания с помощью jar.Я использовал те же настройки, что и в ноутбуке, за исключением использования dbutils.

Я использовал ту же настройку для Spark conf из записной книжки в коде Scala.

Записная книжка:

spark.conf.set(
"fs.azure.account.key.xxxx.dfs.core.windows.net",
dbutils.secrets.get(scope = "kv-secrets", key = "xxxxxx"))

spark.conf.set
("fs.azure.createRemoteFileSystemDuringInitialization", "true")

spark.conf.set
("fs.azure.createRemoteFileSystemDuringInitialization", "false")

val rdd = sqlContext.read.format
("csv").option("header", 
"true").load(
"abfss://catalogs@xxxx.dfs.core.windows.net/test/sample.csv")
// Convert rdd to data frame using toDF; the following import is 
//required to use toDF function.
val df: DataFrame = rdd.toDF()
// Write file to parquet
df.write.parquet
("abfss://catalogs@xxxx.dfs.core.windows.net/test/Sales.parquet")

Scala-код:

val sc = SparkContext.getOrCreate()
val spark = SparkSession.builder().getOrCreate()
sc.getConf.setAppName("Test")

sc.getConf.set("fs.azure.account.key.xxxx.dfs.core.windows.net",
"<actual key>")

sc.getConf.set("fs.azure.account.auth.type", "OAuth")

sc.getConf.set("fs.azure.account.oauth.provider.type",
"org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")

sc.getConf.set("fs.azure.account.oauth2.client.id", "<app id>")

sc.getConf.set("fs.azure.account.oauth2.client.secret", "<app password>")

sc.getConf.set("fs.azure.account.oauth2.client.endpoint",
  "https://login.microsoftonline.com/<tenant id>/oauth2/token")

sc.getConf.set
("fs.azure.createRemoteFileSystemDuringInitialization", "false")

val sqlContext = spark.sqlContext
val rdd = sqlContext.read.format
("csv").option("header", 
"true").load
("abfss://catalogs@xxxx.dfs.core.windows.net/test/sample.csv")
// Convert rdd to data frame using toDF; the following import is 
//required to use toDF function.
val df: DataFrame = rdd.toDF()
println(df.count())
// Write file to parquet

df.write.parquet
("abfss://catalogs@xxxx.dfs.core.windows.net/test/Sales.parquet")

Я ожидал, что файл паркета будет написан.Вместо этого я получаю следующее сообщение об ошибке: 19/04/20 13:58:40 ОШИБКА Невозможно выбросить из кода пользователя: свойство конфигурации xxxx.dfs.core.windows.net не найдено.по адресу shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AbfsConfiguration.getStorageAccountKey (AbfsConfiguration.java:385) по адресу shaded.databricks.v20180920_b33d810.org.apure.Java: 802.(AzureBlobFileSystem.java:103) в org.apache.hadoop.fs.FileSystem.createFileSystem (FileSystem.java:2669)

1 Ответ

0 голосов
/ 21 апреля 2019

Неважно, глупая ошибка.Это должно быть:
`val sc = SparkContext.getOrCreate () val spark = SparkSession.builder (). GetOrCreate () sc.getConf.setAppName (" Test ")

spark.conf.set ("fs.azure.account.key.xxxx.dfs.core.windows.net", "")

spark.conf.set ("fs.azure.account.auth.type", "OAuth")

spark.conf.set ("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")

spark.conf.set ("fs.azure.account.oauth2.client.id", "")

spark.conf.set ("fs.azure.account.oauth2.client.secret", "")

spark.conf.set ("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com//oauth2/token")

spark.conf.set (" fs.azure.createRemoteFileSystemDuringInitialization "), "ложь") `

...