1

Я новичок в gcloud и BigQuery и хочу читать данные из bigquery с использованием искры. Я использовал Google APIs Client Library for Java. и смог соединиться с bigquery. я получаю com.google.api.services.bigquery.Bigquery объекта и способного печатать чтение наборов данных, TABLEID и tableDataКак подключить искру к bigquery с помощью bigquery api

Моего вопрос

Как я могу подключить этот BigQuery проверку подлинности объекта (учетный объект), чтобы зажечь или есть в любом случае использовать этот объект с hadoopApi

, если нет возможности, чем, как можно передать объект учетных данных для newHadoopAPi

GoogleAuthorizationCodeFlow flow = getFlow(); 
    GoogleTokenResponse response = flow.newTokenRequest(authorizationCode) 
      .setRedirectUri(REDIRECT_URI).execute(); 
    Credential credential=flow.createAndStoreCredential(response, null); 
    return credential; 

Мой Hadoop код апи, где я хочу использовать объект учетных данных

val tableData = sc.newAPIHadoopRDD(
    conf, 
    classOf[GsonBigQueryInputFormat], 
    classOf[LongWritable], 
    classOf[JsonObject]). 

ответ

1

Thanx @michael с помощью вашей ссылки, которую я нашел решение

Просто отключить учетную запись службы по конфигурации Hadoop

hadoopConfiguration.set("fs.gs.auth.service.account.enable", "false") 

и следующий код будет работать

val hadoopConfiguration = sc.hadoopConfiguration 
//BigQueryConfiguration. 
hadoopConfiguration.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); 
hadoopConfiguration.set(BigQueryConfiguration.PROJECT_ID_KEY, projectId); 
hadoopConfiguration.set("fs.gs.project.id", projectId); 
hadoopConfiguration.set("fs.gs.auth.service.account.enable", "false") 
hadoopConfiguration.set("fs.gs.auth.client.id", 
    clientId) 
hadoopConfiguration.set("fs.gs.auth.client.secret", 
    clientSecret) 
hadoopConfiguration.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); 
hadoopConfiguration.set("fs.gs.auth.client.file", tokenPath); 
hadoopConfiguration.set(BigQueryConfiguration.GCS_BUCKET_KEY, bucket) 

// Configure input and output for BigQuery access. 
com.google.cloud.hadoop.io.bigquery.BigQueryConfiguration.configureBigQueryInput(hadoopConfiguration, dataSetId + "." + tableId) 
val tableData = sc.newAPIHadoopRDD(
    hadoopConfiguration, 
    classOf[GsonBigQueryInputFormat], 
    classOf[LongWritable], 
    classOf[JsonObject]) 

Где маркер путь содержит обновление маркеров

{ 
    "credentials": { 
     "user": { 
      "access_token":  "ya29..wgL6fH2Gx5asdaadsBl2Trasd0sBqV_ZAS7xKDtNS0z4Qyv5ypassdh0soplQ", 
      "expiration_time_millis": 1460473581255, 
      "refresh_token": "XXXXXXXXXxxxxxxxxx" 
      } 
     } 
} 
2

Я думаю, что BigQuery Разъем для Hadoop может решить вашу проблему, не требуя, чтобы написать свой собственный клиент низкий уровень. Проверьте это: https://cloud.google.com/hadoop/bigquery-connector

Вот пример использования его для подключения искры к BigQuery: https://cloud.google.com/hadoop/examples/bigquery-connector-spark-example

+0

спасибо за ответ разъема Hadoop @Michael Шелдон BigQuery работает для меня, но я хочу, чтобы проверить подлинность с OAuth2 обновить маркер –