Pyspark и BigQuery используют два разных идентификатора проекта в Google Dataproc
Я хочу выполнить некоторые задания pyspark, используя Google Dataproc с разными идентификаторами проекта, но пока безуспешно. Я новичок в pyspark и Google Cloud, но я последовал этому примеру и хорошо работает (если набор данных BigQuery либо общедоступен, либо принадлежит моему проекту GCP, которым является ProjectA). Входные параметры выглядят так:
bucket = sc._jsc.hadoopConfiguration().get('fs.gs.system.bucket')
projectA = sc._jsc.hadoopConfiguration().get('fs.gs.project.id')
input_directory ='gs://{}/hadoop/tmp/bigquery/pyspark_input'.format(bucket)
conf = {
# Input Parameters
'mapred.bq.project.id': projectA,
'mapred.bq.gcs.bucket': bucket,
'mapred.bq.temp.gcs.path': input_directory,
'mapred.bq.input.project.id': 'projectA',
'mapred.bq.input.dataset.id': 'my_dataset',
'mapred.bq.input.table.id': 'my_table',
}
# Load data in from BigQuery.
table_data = sc.newAPIHadoopRDD(
'com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat',
'org.apache.hadoop.io.LongWritable',
'com.google.gson.JsonObject',
conf=conf)
Но мне нужно запустить задание из набора данных BQ ProjectB (у меня есть учетные данные для запроса), поэтому при настройке входных параметров, которые выглядят так:
conf = {
# Input Parameters
'mapred.bq.project.id': projectA,
'mapred.bq.gcs.bucket': bucket,
'mapred.bq.temp.gcs.path': input_directory,
'mapred.bq.input.project.id': 'projectB',
'mapred.bq.input.dataset.id': 'the_datasetB',
'mapred.bq.input.table.id': 'the_tableB',
}
и попробуйте загрузить данные из BQ, мой скрипт продолжает работать бесконечно. Как правильно настроить?
К вашему сведению, после запуска приведенного выше примера, я вижу, что 2 ковра (shard-0 и shard-1) созданы в Google Storage и содержат соответствующие данные BQ, но с моей работой создается только shard-0, и он пуст,
1 ответ
Я поговорил со своим коллегой Денисом, и вот его предложение:
"Хм, не уверен, что это должно работать. Возможно, они захотят проверить с помощью"bq" CLI внутри главного узла, чтобы вручную попробовать выполнить какое-то задание"bq extract"таблицы projectB в их корзину GCS, так как это все, что соединитель делает под капот.
Если бы мне пришлось угадывать, я бы заподозрил, что они только подразумевают, что их личное имя пользователя имеет учетные данные для запроса projectB, но учетная запись службы по умолчанию для projectA может не иметь разрешений для запроса. Все внутри виртуальных машин Dataproc действует от имени учетной записи службы вычислений, назначенной виртуальным машинам, а не конечному пользователю.
Они могут
gcloud compute instance описывают -m
и где-то там перечислены адреса электронной почты учетной записи службы."