0

다른 프로젝트 ID로 Google Dataproc을 사용하여 일부 pyspark 작업을 지금까지 성공시키고 싶습니다. 저는 pyspark 및 Google Cloud가있는 초보자이지만, this 예제를 따라 갔고 잘 실행됩니다 (BigQuery 데이터 세트가 공개이거나 내 GCP 프로젝트 인 ProjectA에 속한 경우). 입력 매개 변수는 다음과 같이 :Google Dataproc에서 두 개의 다른 프로젝트 ID를 사용하는 Pyspark 및 BigQuery

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) 

하지만이 ProjectB (나는 그것을 조회하는 자격 증명을 가지고)의 BQ 데이터 세트에서 작업을 실행하는 것입니다 필요한, 그래서 다음과 같이 입력 매개 변수를 설정하는 경우 :

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에서 데이터를로드하려고 시도하면 내 스크립트가 계속 실행됩니다. 어떻게 제대로 설정해야합니까?

앞서 언급 한 example을 실행 한 후 2 개의 카펫 (shard-0 및 shard-1)이 Google 스토리지에 만들어지고 해당 BQ 데이터가 포함되어 있음을 알 수 있습니다. 생성되고 비어 있습니다.

답변

0

여기 내 동료 데니스 이야기와 그의 제안이다. "흠, 확실하지, 그것을 작동합니다 그들은 함께 테스트 할 수 있습니다"


에 마스터 노드 내부의 "CLI를 BQ 수동으로 projectB 테이블의 "bq extract"작업을 GCS 버킷에 넣으십시오. 그 이유는 모든 커넥터가 GOD 버킷에 있기 때문입니다.

만약 내가 개인적인 사용자 이름이 projectB를 쿼리하지만 projectA의 기본 서비스 계정에는 쿼리 권한이 없을 수 있습니다 .Dataproc VM 내부의 모든 항목은 compute s 최종 사용자가 아니라 VM에 할당 된 계정입니다.

그들은

gcloud 컴퓨팅 인스턴스는 -m

설명 할 수 어딘가에 거기에는 서비스 계정 이메일 주소를 나열합니다. "