Connettiti ad Apache Spark

In qualità di amministratore BigQuery, puoi creare connection per consentire agli analisti di dati di eseguire stored procedure per Apache Spark.

Prima di iniziare

Considerazioni sulla località

Quando scegli una località per i tuoi dati, considera quanto segue:

Più regioni

Devi specificare le risorse Google Cloud che si trovano nello stesso spazio area geografica:

  • Una connessione nell'area multiregionale degli Stati Uniti di BigQuery può fare riferimento a un server di cronologia Spark o un Dataproc Metastore in qualsiasi singola regione dell'area geografica degli Stati Uniti, ad esempio us-central1, us-east4 o us-west2.

  • Una connessione nella località multiregionale dell'UE di BigQuery può fare riferimento a un server di cronologia Spark o a Dataproc Metastore nel membro stati del Unione Europea, ad esempio europe-north1 o europe-west3.

Regioni singole

Una connessione in una singola regione può fare riferimento solo a Google Cloud nella stessa regione. Ad esempio, una connessione nel singolo regione us-east4 può fare riferimento solo a un server di cronologia Spark o a un Dataproc Metastore in us-east4.

Crea connessioni

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Per creare una connessione, fai clic su Aggiungi Aggiungi dati e fai clic su Connessioni a origini dati esterne.

  3. Nell'elenco Tipo di connessione, seleziona Apache Spark.

  4. Nel campo ID connessione, inserisci un nome per la connessione, ad ad esempio spark_connection.

  5. Nell'elenco Località dei dati, seleziona una regione.

    Puoi creare una connessione in regioni e regioni multiple che supportano BigQuery. Per ulteriori informazioni, consulta Considerazioni sulla posizione.

  6. (Facoltativo) Dall'elenco Servizio Metastore, seleziona una Dataproc Metastore.

  7. (Facoltativo) Nel campo Cluster di server di cronologia, inserisci un valore Server di cronologia permanente di Dataproc.

  8. Fai clic su Crea connessione.

  9. Fai clic su Vai alla connessione.

  10. Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio per utilizzarlo in una successivo.

bq

  1. In un ambiente a riga di comando, utilizza bq mk un comando kubectl per creare connessione:

    bq mk --connection --connection_type='SPARK' \
     --properties=PROPERTIES \
     --project_id=PROJECT_ID \
     --location=LOCATION
     CONNECTION_ID
    

    Sostituisci quanto segue:

    • PROPERTIES: una coppia chiave-valore da fornire parametri specifici della connessione in formato JSON

      Ad esempio:

      --properties='{
      "metastoreServiceConfig": {"metastoreService": "METASTORE_SERVICE_NAME"},
      "sparkHistoryServerConfig": {"dataprocCluster": "DATAPROC_CLUSTER_NAME"}
      }'
      

      Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud

    • LOCATION: la località in cui vuoi archiviare la connessione, ad esempio US

    • CONNECTION_ID: la connessione ID, ad esempio myconnection

      Quando visualizzi i dettagli della connessione nella console Google Cloud, l'ID connessione è il valore nell'ultima dell'ID connessione completo visualizzato in ID connessione, ad esempio projects/.../locations/.../connections/myconnection

  2. Recupera e copia l'ID account di servizio perché ne hai bisogno in un altro passaggio:

    bq show --location=LOCATION --connection PROJECT_ID.LOCATION.CONNECTION_ID
    

    L'output è simile al seguente:

    Connection myproject.us.myconnection
    
           name           type                    properties
    ---------------------- ------- ---------------------------------------------------
    myproject.us.myconnection  SPARK   {"serviceAccountId": "bqserver@example.iam.gserviceaccount.com"}
    

Per informazioni su come gestire le connessioni, vedi Gestire le connessioni.

Concedi l'accesso all'account di servizio

Consenti a una stored procedure per Apache Spark di accedere a Google Cloud devi prima concedere l'account di servizio associati alla connessione della stored procedure, le risorse IAM necessarie autorizzazioni aggiuntive. In alternativa, puoi utilizzare account di servizio personalizzato per l'accesso ai dati.

  • Per leggere e scrivere dati da e in BigQuery, devi fornire le seguenti autorizzazioni IAM per l'account di servizio:

    • bigquery.tables.* nelle tue tabelle BigQuery
    • bigquery.readsessions.* nel tuo progetto

    Il ruolo IAM roles/bigquery.admin include le autorizzazioni necessarie all'account di servizio per leggere e scrivere dati da e verso in BigQuery.

  • Per leggere e scrivere dati da e in Cloud Storage, devi fornire all'account di servizio l'autorizzazione storage.objects.* sul tuo oggetti Cloud Storage.

    Il ruolo IAM roles/storage.objectAdmin include le autorizzazioni necessarie all'account di servizio per leggere e scrivere dati da e in Cloud Storage.

  • Se specifichi Dataproc Metastore quando crei un quindi BigQuery recupererà i dettagli della configurazione del metastore, devi assegnare all'account di servizio Autorizzazione metastore.services.get su Dataproc Metastore.

    Il ruolo roles/metastore.metadataViewer predefinito include l'autorizzazione necessarie all'account di servizio per recuperare i dettagli del metastore.

    Devi inoltre concedere all'account di servizio l'autorizzazione roles/storage.objectAdmin sul bucket Cloud Storage, in modo che i tuoi può accedere alla directory del warehouse Hive del tuo Dataproc Metastore (hive.metastore.warehouse.dir). Se la stored procedure esegue operazioni sul metastore, potrebbe dover concedere autorizzazioni aggiuntive. Per ulteriori informazioni i ruoli e le autorizzazioni IAM in Dataproc Metastore, consulta Autorizzazioni e ruoli predefiniti di Dataproc Metastore.

  • Se specifichi un server di cronologia permanente Dataproc durante creare una connessione, devi concedere all'account di servizio ruoli:

    • Il ruolo roles/dataproc.viewer in Dataproc Server di cronologia permanente che contiene dataproc.clusters.get autorizzazione.
    • Ruolo roles/storage.objectAdmin nel bucket Cloud Storage specificato per la proprietà spark:spark.history.fs.logDirectory quando crei il server di cronologia permanente di Dataproc.

    Per ulteriori informazioni, consulta Cronologia permanente di Dataproc Server e Ruoli e autorizzazioni di Dataproc.

Condividere le connessioni con gli utenti

Puoi concedere i ruoli seguenti per consentire agli utenti di eseguire query sui dati e gestire le connessioni:

  • roles/bigquery.connectionUser: consente agli utenti di utilizzare le connessioni per connettersi con origini dati esterne ed eseguire query su di esse.

  • roles/bigquery.connectionAdmin: consente agli utenti di gestire le connessioni.

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, vedi Autorizzazioni e ruoli predefiniti.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

    Le connessioni sono elencate nel progetto, in un gruppo denominato Connessioni esterne.

  2. Nel riquadro Explorer, fai clic sul nome del tuo progetto. > Connessioni esterne > connessione.

  3. Nel riquadro Dettagli, fai clic su Condividi per condividere una connessione. Quindi:

    1. Nella finestra di dialogo Autorizzazioni di connessione, condividi il connessione con altre entità aggiungendo o modificando tra cui scegliere.

    2. Fai clic su Salva.

bq

Non puoi condividere una connessione con lo strumento a riga di comando bq. Per condividere una connessione, usa la console Google Cloud oppure metodo dell'API BigQuery Connections per condividere una connessione.

API

Utilizza la Metodo projects.locations.connections.setIAM nella sezione di riferimento dell'API REST di BigQuery Connections, fornisce un'istanza della risorsa policy.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Passaggi successivi