#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
ссылки на этот каталог устранили проблему.