Verbindung zu Apache Spark herstellen

Als BigQuery-Administrator können Sie eine Verbindung erstellen, damit Datenanalysten gespeicherte Prozeduren für Apache Spark ausführen können.

Hinweise

Überlegungen zum Standort

Beachten Sie Folgendes, wenn Sie einen Standort für Ihre Daten auswählen:

Multiregionen

Sie müssen Google Cloud-Ressourcen angeben, die sich im selben großen geografischen Bereich befinden:

  • Eine Verbindung in der Multiregion BigQuery USA kann in einer beliebigen Region im geografischen Gebiet der USA auf einen Spark History Server oder einen Dataproc Metastore verweisen, z. B. us-central1, us-east4 oder us-west2.

  • Eine Verbindung in der Multiregion BigQuery EU kann auf einen Spark History Server oder einen Dataproc Metastore in den Mitgliedsstaaten der Europäischen Union verweisen, z. B. europe-north1 oder europe-west3

Einzelne Regionen

Eine Verbindung in einer einzelnen Region kann nur auf Google Cloud-Ressourcen in derselben Region verweisen. Beispielsweise kann eine Verbindung in der einzelnen Region us-east4 nur auf einen Spark-History Server oder einen Dataproc Metastore in us-east4 verweisen.

Verbindungen erstellen

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Hinzufügen und dann auf Verbindungen zu externen Datenquellen, um eine Verbindung zu erstellen.

  3. Wählen Sie in der Liste Verbindungstyp die Option Apache Spark aus.

  4. Geben Sie im Feld Connection ID (Verbindungs-ID) einen Namen für Ihre Verbindung ein, z. B. spark_connection.

  5. Wählen Sie in der Liste Speicherort der Daten eine Region aus.

    Sie können eine Verbindung in Regionen und Multiregionen erstellen, die BigQuery unterstützen. Weitere Informationen finden Sie unter Überlegungen zum Standort.

  6. Optional: Wählen Sie aus der Liste Metastore-Dienst einen Dataproc Metastore aus.

  7. Optional: Geben Sie im Feld Verlaufsservercluster einen Dataproc Persistent History Server ein.

  8. Klicken Sie auf Verbindung erstellen.

  9. Klicken Sie auf Zur Verbindung.

  10. Kopieren Sie im Bereich Verbindungsinformationen die Dienstkonto-ID zur Verwendung in einem folgenden Schritt.

bq

  1. Verwenden Sie in einer Befehlszeilenumgebung den Befehl bq mk, um eine Verbindung herzustellen:

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

    Dabei gilt:

    • PROPERTIES: ein Schlüssel/Wert-Paar, das verbindungsspezifische Parameter im JSON-Format enthält

      Beispiel:

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

      Dabei gilt:

    • PROJECT_ID: Ihre Google Cloud-Projekt-ID

    • LOCATION: der Standort, an dem Sie die Verbindung speichern möchten, z. B. US

    • CONNECTION_ID: die Verbindungs-ID, z. B. myconnection.

      Wenn Sie sich Verbindungsdetails in der Google Cloud Console ansehen, ist die Verbindungs-ID der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter Verbindungs-ID angezeigt wird, z. B. projects/.../locations/.../connections/myconnection.

  2. Rufen Sie die Dienstkonto-ID ab und kopieren Sie sie, da Sie sie in einem anderen Schritt benötigen:

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

    Die Ausgabe sieht in etwa so aus:

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

Weitere Informationen zum Verwalten von Verbindungen finden Sie unter Verbindungen verwalten.

Zugriff auf das Dienstkonto gewähren

Damit ein gespeichertes Verfahren für Apache Spark auf Ihre Google Cloud-Ressourcen zugreifen kann, müssen Sie dem der Verbindung des gespeicherten Verfahrens zugeordneten Dienstkonto die erforderlichen IAM-Berechtigungen erteilen. Alternativ können Sie Ihr benutzerdefiniertes Dienstkonto für den Datenzugriff verwenden.

  • Zum Lesen und Schreiben von Daten aus und in BigQuery müssen Sie dem Dienstkonto die folgenden IAM-Berechtigungen erteilen:

    • bigquery.tables.* für Ihre BigQuery-Tabellen
    • bigquery.readsessions.* für Ihr Projekt

    Die IAM-Rolle roles/bigquery.admin enthält die Berechtigungen, die das Dienstkonto benötigt, um Daten aus und in BigQuery zu lesen und zu schreiben.

  • Zum Lesen und Schreiben von Daten in und aus Cloud Storage müssen Sie dem Dienstkonto die Berechtigung storage.objects.* für Ihre Cloud Storage-Objekte erteilen.

    Die IAM-Rolle roles/storage.objectAdmin enthält die Berechtigungen, die das Dienstkonto benötigt, um Daten aus und in Cloud Storage zu lesen und zu schreiben.

  • Wenn Sie Dataproc Metastore beim Erstellen einer Verbindung angeben, muss BigQuery dem Dienstkonto die Berechtigung metastore.services.get in Ihrem Dataproc Metastore erteilen, damit Details zur Metaspeicherkonfiguration abgerufen werden können.

    Die vordefinierte Rolle roles/metastore.metadataViewer enthält die Berechtigung, die das Dienstkonto benötigt, um Details zur Metaspeicherkonfiguration abzurufen.

    Sie müssen dem Dienstkonto auch die Rolle roles/storage.objectAdmin für den Cloud Storage-Bucket zuweisen, damit Ihre gespeicherte Prozedur auf das Hive-Warehouse-Verzeichnis Ihres Dataproc Metastores (hive.metastore.warehouse.dir) zugreifen kann. Wenn Ihre gespeicherte Prozedur Vorgänge im Metastore ausführt, müssen Sie möglicherweise zusätzliche Berechtigungen erteilen. Weitere Informationen zu IAM-Rollen und Berechtigungen in Dataproc Metastore finden Sie unter Vordefinierte Rollen und Berechtigungen für Dataproc Metastore.

  • Wenn Sie einen Dataproc Persistent History Server angeben, wenn Sie eine Verbindung erstellen, müssen Sie dem Dienstkonto die folgenden Rollen zuweisen:

    • Die Rolle roles/dataproc.viewer auf Ihrem Dataproc Persistent History Server, die die Berechtigung dataproc.clusters.get enthält.
    • Die Rolle roles/storage.objectAdmin im Cloud Storage-Bucket, die Sie beim Erstellen des Dataproc Persistent History Server für das Attribut spark:spark.history.fs.logDirectory angeben.

    Weitere Informationen finden Sie unter Dataproc Persistent History Server und Dataproc-Rollen und -Berechtigungen.

Verbindungen für Nutzer freigeben

Sie können die folgenden Rollen zuweisen, damit Nutzer Daten abfragen und Verbindungen verwalten können:

  • roles/bigquery.connectionUser: Nutzer können Verbindungen nutzen, um sich mit externen Datenquellen zu verbinden und diese abzufragen.

  • roles/bigquery.connectionAdmin: Nutzer können Verbindungen verwalten.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

    Verbindungen werden in Ihrem Projekt in einer Gruppe namens Externe Verbindungen aufgeführt.

  2. Klicken Sie im Bereich Explorer auf Ihren Projektnamen > Externe Verbindungen > Verbindung.

  3. Klicken Sie im Bereich Details auf Freigeben, um eine Verbindung freizugeben. Führen Sie anschließend folgende Schritte aus:

    1. Geben Sie im Dialogfeld Verbindungsberechtigungen die Verbindung für andere Hauptkonten frei, indem Sie Hauptkonten hinzufügen oder bearbeiten.

    2. Klicken Sie auf Speichern.

bq

Sie können keine Verbindung mit dem bq-Befehlszeilentool freigeben. Verwenden Sie zum Freigeben einer Verbindung die Google Cloud Console oder die Methode der BigQuery Connections API.

API

Verwenden Sie die Methode projects.locations.connections.setIAM in dem Referenzabschnitt zur BigQuery Connections REST API und geben Sie eine Instanz der Ressource policy an.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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");
    }
  }
}

Nächste Schritte