Задание Flink, выполняемое в Dataproc, не находит учетные данные по умолчанию для приложения Google

#google-cloud-platform #google-compute-engine #apache-flink #google-cloud-dataproc #service-accounts

#google-облачная платформа #google-compute-engine #apache-flink #google-cloud-dataproc #сервис-учетные записи

Вопрос:

Согласно большей части документации (которой не так много), при запуске приложения в Google Compute Engine клиентские библиотеки Google должны автоматически получать учетные данные приложения по умолчанию, которые использовались для создания виртуальных машин.

В настоящее время я запускаю кластер Flink в Dataproc (управляемый Hadoop). Dataproc выполняется на платформе Google Compute Engine с виртуальными машинами для главного и рабочего узлов. Когда я развертываю задание с помощью Yarn, задание завершается с ошибкой, поскольку оно не может определить учетные данные приложения по умолчанию.

Кто-нибудь знает, может ли Flink автоматически получать учетные данные приложения по умолчанию на виртуальных машинах? Нужно ли мне что-либо настраивать или эта функция просто не поддерживается, и мне нужно указать JSON учетной записи службы в коде вручную?

Редактировать:

Еще немного информации.

Задание Flink — это потоковое задание (никогда не заканчивающееся), которое собирает записи и вставляет их в таблицу Google BigQuery и корзину Google. Для этого я использую две клиентские библиотеки, перечисленные ниже:

 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-bigquery</artifactId>
   <version>1.65.0</version>
</dependency>
<dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
   <version>1.65.0</version>
</dependency>
  

Я добавил в основную функцию запуска GoogleCredentials.getApplicationDefault() вызов, чтобы убедиться, что учетные данные получены, но это выдает следующую ошибку:

 The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials
  

Кроме того, в журнале есть строка Failed to detect whether we are running on Google Compute Engine . Это наводит меня на мысль, что он не может обнаружить его на платформе Compute Engine.

Из некоторого чтения в Интернете они сказали, что для обнаружения этого использовался сервер метаданных. Мы работаем в VPC, поэтому я не думаю, что он может установить это соединение. Действительно ли это так, и если да, то есть ли другой подход, который я могу использовать?

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

1. Какую библиотеку вы используете, которая не проходит проверку подлинности? Вы читаете / записываете данные в GCS? Будет полезно, если вы предоставите фрагмент того, что вы делаете, и как это не удается.

2. @IgorDvorzhak Я добавил еще немного информации!

3. Служба метаданных GCE прослушивает данные на локальном хосте каждой виртуальной машины, поэтому для доступа к ней не требуется сетевое подключение. Можете ли вы проверить вручную, используя curl , что аутентификация через службу метаданных GCE работает на виртуальных машинах Dataproc при подключении к ним по SSH: cloud.google.com/compute/docs/access /…

4. Кроме того, какую версию Dataproc вы используете? И вы затеняли / перемещали зависимости в своем приложении jar-with-dependencies, чтобы убедиться, что они не конфликтуют с библиотеками времени выполнения Flink?

5. Спасибо за помощь @IgorDvorzhak похоже, проблема была в моей настройке. Я добавил ответ ниже.

Ответ №1:

Так что это может быть не для всех, но проблема была в настройке.

Я использовал модуль Kubernetes для запуска сеанса Yarn и использовал его для отправки задания в кластер Flink. При использовании этого подхода следует иметь в виду, что кажется, что топология выполняется в диспетчере задач, а основная функция вызывается на машине, запускающей сеанс Yarn. В моем случае это был модуль.

Установка учетных данных учетной записи службы в модуль и указание GOOGLE_APPLICATION_CREDENTIALS ссылки на этот каталог устранили проблему.