Ошибка соединителя Spark BigQuery при получении маркера доступа с сервера метаданных

# #apache-spark #google-bigquery

Вопрос:

Я получаю эту ошибку при попытке записи в BigQuery с помощью соединителя spark bigquery. Приложение запускается из кластера hadoop (не dataproc).

исключение java.io.IOException: Ошибка при получении маркера доступа с сервера метаданных по адресу: http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token по адресу com.google.облако.hadoop.переупакованный.gcs.com.google.облако.hadoop.util.Учетная запись CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:236) в com.google.cloud.hadoop.переупакованный.gcs.com.google.облако.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:91) в com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.getCredential(GoogleHadoopFileSystemBase.java:1533) в com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.configure(GoogleHadoopFileSystemBase.java:1554) по адресу <url>.google.облако.hadoop.fs.gcs.GoogleHadoopFileSystemBase.инициализировать(GoogleHadoopFileSystemBase.java:654) в com.google.cloud.в Hadoop.ПС.ГКС.GoogleHadoopFileSystemBase.инициализировать(GoogleHadoopFileSystemBase.Ява:617) в орг.Апачи.в Hadoop.ПС.Файловая система.createFileSystem(файловая система.в Java:3303) в орг.Апачи.в Hadoop.ПС.Файловая система.доступ к 200$(файловая система.Ява:124) в орг.Апачи.в Hadoop.ПС.Файловая Система$Кэш.getInternal(файловая система.в Java:3352) в орг.Апачи.в Hadoop.ПС.Файловая Система$Кэш.вам(файловая система.в Java:3320) на орг.Апачи.в Hadoop.ПС.Файловая система.вам(файловая система.в Java:479) в орг.apache.hadoop.fs.Путь.getFileSystem(Путь.java:361) в com.google.cloud.spark.bigquery.Большой помощник по написанию.(BigQueryWriteHelper.scala:62) в com.google.cloud.spark.bigquery.BigQueryInsertableRelation.вставьте(BigQueryInsertableRelation.scala:42) в com.google.cloud.spark.bigquery.BigQueryRelationProvider.createRelation(BigQueryRelationProvider.scala:112) в org.apache.spark.sql.выполнение.источники данных.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45) в org.apache.spark.sql.выполнение.команда.ExecutedCommandExec.sideffectresult$lzycompute(команды.scala:70) в организации.apache.spark.sql.выполнение.команды.ExecutedCommandExec.sideffectresult(команды.scala:68) в org.apache.spark.sql.выполнение.команда.ExecutedCommandExec.doExecute(команды.scala:86) в org.apache.spark.sql.выполнение.SparkPlan$$anonfun$выполнить$1.применить(SparkPlan.scala:131) в org.apache.spark.sql.выполнение.SparkPlan$$anonfun$выполнить$1.применить(SparkPlan.scala:127) в org.apache.spark.sql.выполнение.SparkPlan$$anonfun$ExecuteQuery$1.примените(SparkPlan.scala:155) в org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) в организации.apache.spark.sql.выполнение.SparkPlan.ExecuteQuery(SparkPlan.scala:152) в org.apache.spark.sql.выполнение.SparkPlan.выполнить(SparkPlan.scala:127) в org.apache.spark.sql.выполнение.Запрос на выполнение.toRdd$lzycompute(QueryExecution.scala:80) в org.apache.spark.sql.выполнение.Запрос на выполнение.toRdd(QueryExecution.в Scala:80) в орг.Апачи.Искра.язык SQL.DataFrameWriter$$anonfun$выполнитькоманду$1.применить(DataFrameWriter.в Scala:664) в орг.Апачи.Искра.язык SQL.DataFrameWriter$$anonfun$выполнитькоманду$1.применить(DataFrameWriter.в Scala:664) в орг.apache.spark.sql.выполнение.SQLExecution$.withNewExecutionId(SQLExecution.scala:77) в org.apache.spark.sql.DataFrameWriter.Команда выполнения(DataFrameWriter.scala:664) в org.apache.spark.sql.DataFrameWriter.savetov1 источник(DataFrameWriter.scala:273) в org.apache.spark.sql.DataFrameWriter.сохранить(DataFrameWriter.scala:267) в org.apache.spark.sql.DataFrameWriter.сохранить(DataFrameWriter.scala:225)

Вот код,

     dataset.write().format("bigquery")
            .option("temporaryGcsBucket", tempGcsBucket)
            //.option("table", databaseName   "."   tableName)
            .option("project", projectId)
            .option("parentProject", parentProjectId)
            .option("credentials", credentials)
            .mode(saveMode).save(projectId   "."   databaseName   "."   tableName);
 

Я могу читать из той же таблицы, в которую пытаюсь писать, используя те же учетные данные (база учетных записей службы 64 в кодировке). Я использую spark-bigquery-with-dependencies_2.11-0.19.1.jar версия разъема.

Тот же код отлично работал в нашей нижней среде, где проект и родительский проект одинаковы. Но в проде они другие.

Комментарии:

1. удалось ли вам решить эту проблему? Не могли бы вы, пожалуйста, поделиться своим решением

2. У меня та же проблема… Вам удалось ее решить?