Cloud Spanner Avro-Dateien importieren

Auf dieser Seite wird beschrieben, wie Sie Cloud Spanner-Datenbanken mithilfe der Google Cloud Console in Cloud Spanner importieren. Informationen zum Importieren von Avro-Dateien aus einer anderen Quelle finden Sie unter Importieren von Daten aus Nicht-Cloud-Spanner-Datenbanken.

In diesem Vorgang wird Dataflow zum Importieren von Daten aus einem Cloud Storage-Bucket-Ordner verwendet, der eine Reihe von Avro-Dateien und JSON-Manifestdateien enthält. Für den Import werden nur Avro-Dateien unterstützt, die aus Cloud Spanner exportiert wurden.

Führen Sie die Schritte im Abschnitt Vorbereitung auf dieser Seite aus, um eine Cloud Spanner-Datenbank mit der REST API oder dem gcloud-Befehlszeilentool zu importieren. Lesen Sie dann die detaillierte Anleitung unter Cloud Storage Avro für Cloud Spanner.

Hinweis

Zum Importieren einer Cloud Spanner-Datenbank müssen Sie zuerst die APIs für Cloud Spanner, Cloud Storage, Compute Engine und Dataflow aktivieren:

Aktivieren Sie die APIs

Außerdem brauchen Sie ein ausreichend großes Kontingent und die erforderlichen IAM-Berechtigungen.

Kontingentanforderungen

Die Kontingentanforderungen für Importjobs sehen je nach Google Cloud-Dienst so aus:

  • Cloud Spanner: Sie müssen für die zu importierenden Daten ausreichend Knoten zur Verfügung haben. Für den Import einer Datenbank sind keine zusätzlichen Knoten erforderlich, allerdings müssen Sie unter Umständen weitere Knoten hinzufügen, damit der Job innerhalb eines angemessenen Zeitraums abgeschlossen wird. Weitere Einzelheiten finden Sie unter Jobs optimieren.
  • Cloud Storage: Zum Importieren müssen Sie einen Bucket mit Ihren zuvor exportierten Dateien haben. Für den Bucket muss keine Größe festgelegt werden.
  • Dataflow: Für Importjobs gelten dieselben Compute Engine-Kontingente für CPU, Laufwerksnutzung und IP-Adressen wie für andere Dataflow-Jobs.
  • Compute Engine: Bevor Sie den Importjob ausführen, müssen Sie zuerst Kontingente für Compute Engine einrichten, die von Dataflow verwendet werden. Diese Kontingente stellen die maximale Anzahl von Ressourcen dar, die Dataflow für Ihren Job verwenden darf. Empfohlene Anfangswerte sind:

    • CPUs: 200
    • Verwendete IP-Adressen: 200
    • Nichtflüchtiger Standardspeicher: 50 TB

    In der Regel sind keine weiteren Anpassungen erforderlich. Dataflow bietet Autoscaling, sodass Sie nur für die Ressourcen zahlen, die beim Import tatsächlich verwendet werden. Wenn Ihr Job mehr Ressourcen verwenden kann, wird in der Dataflow-UI ein Warnsymbol angezeigt. Der Job sollte trotz dieses Warnsymbols beendet werden.

IAM-Anforderungen

Für das Importieren einer Datenbank benötigen Sie außerdem IAM-Rollen mit ausreichenden Berechtigungen, um alle Dienste nutzen zu können, die für einen Importjob erforderlich sind. Informationen zum Zuweisen von Rollen und Berechtigungen finden Sie unter IAM-Rollen anwenden.

Zum Importieren einer Datenbank benötigen Sie folgende Rollen:

  • Auf Google Cloud-Projektebene:
    • Cloud Spanner-Betrachter
    • Dataflow-Administrator
    • Storage-Administrator
  • Auf der Cloud Spanner-Datenbank- oder Instanzebene bzw. auf der Google Cloud-Projektebene:
    • Cloud Spanner-Leser
    • Cloud Spanner-Datenbank-Administrator (nur für Importjobs erforderlich)

Optional: Datenbankordner in Cloud Storage suchen

Zum Suchen des Ordners mit der exportierten Datenbank in der Cloud Console wechseln Sie zum Cloud Storage-Browser und klicken auf den Bucket mit dem exportierten Ordner.

Zum Cloud Storage-Browser

Der Name des Ordners mit Ihren exportierten Daten beginnt mit der ID Ihrer Instanz, dem Datenbanknamen und dem Zeitstempel des Exportjobs. Der Ordner enthält Folgendes:

  • Eine spanner-export.json-Datei
  • Eine TableName-manifest.json-Datei für jede Tabelle in der Datenbank, die Sie exportiert haben
  • Mindestens eine TableName.avro-#####-of-#####-Datei Die erste Zahl in der Erweiterung .avro-#####-of-##### steht für den Index der Avro-Datei, beginnend bei null, und die zweite Zahl steht für die Anzahl der Avro-Dateien, die für jede Tabelle generiert werden.

    Songs.avro-00001-of-00002 ist beispielsweise die zweite von zwei Dateien, die die Daten der Tabelle Songs enthalten.

Datenbank importieren

Führen Sie folgende Schritte aus, um die Cloud Spanner-Datenbank aus Cloud Storage in Ihre Instanz zu importieren:

  1. Rufen Sie die Cloud Spanner-Seite Instanzen auf.

    Zur Seite "Instanzen"

  2. Klicken Sie auf den Namen der Instanz, in die die Datenbank zu importieren ist.

  3. Klicken Sie auf den Tab Import/Export und dann auf die Schaltfläche Import.

  4. Klicken Sie unter Quellordner auswählen auf Durchsuchen.

  5. Suchen Sie den Bucket mit Ihrem Export in der angezeigten Liste oder klicken Sie auf Suchen Screenshot des UI-Elements zum Suchen, um die Liste zu filtern und den Bucket zu ermitteln. Klicken Sie doppelt auf den Bucket, um die darin enthaltenen Ordner aufzurufen.

  6. Suchen Sie den Ordner mit den exportierten Dateien und klicken Sie darauf, um ihn auszuwählen.

  7. Klicken Sie auf Auswählen.

  8. Geben Sie einen Namen für die neue Datenbank ein, die Cloud Spanner während des Importvorgangs erstellt. Der Datenbankname darf in Ihrer Instanz nicht bereits vorhanden sein.

  9. Wählen Sie aus dem Drop-down-Menü Region für den Importjob auswählen eine Region aus.

  10. Klicken Sie auf das Kästchen unter Gebühren bestätigen, um zu bestätigen, dass zusätzlich zu den Kosten für die vorhandenen Cloud Spanner-Knoten weitere Gebühren anfallen.

  11. Klicken Sie auf Importieren.

    In der Cloud Console sehen Sie jetzt die Seite Datenbankdetails mit einem Feld, in dem der Importjob einschließlich der verstrichenen Zeit beschrieben wird:

    Screenshot eines laufenden Jobs

Wenn der Job beendet oder abgebrochen wird, ist auf der Seite Datenbankdetails in der Cloud Console eine entsprechende Meldung zu sehen. Wurde der Job erfolgreich beendet, lautet sie:

Erfolgsmeldung für Importjob

Wenn der Job nicht erfolgreich war, wird eine Fehlermeldung angezeigt:

Fehlermeldung für Importjob

Wenn der Job fehlschlägt, prüfen Sie die Dataflow-Logs des Jobs auf Fehlerdetails und lesen Sie Fehlerbehebung bei fehlgeschlagenen Importjobs.

Region für Importjob auswählen

Welche Region Sie auswählen, hängt davon ab, ob Ihr Cloud Storage-Bucket eine regionale oder multiregionale Konfiguration verwendet. Entscheiden Sie sich für eine Region, die sich mit dem Speicherort Ihres Cloud Storage-Buckets überschneidet, um Kosten für ausgehenden Netzwerktraffic zu vermeiden.

Regionale Bucket-Speicherorte

Wenn der Speicherort Ihres Cloud Storage-Buckets regional ist, wählen Sie dieselbe Region auch für den Importjob aus, sofern in dieser Region eine kostenlose Netzwerknutzung zur Verfügung steht.

Ist dieselbe Region nicht verfügbar, fallen Gebühren für ausgehenden Traffic an. Wählen Sie anhand der Cloud Storage-Preisliste für ausgehenden Netzwerktraffic eine Region aus, in der die Gebühren für ausgehenden Netzwerktraffic möglichst gering sind.

Multiregionale Bucket-Speicherorte

Wenn der Speicherort Ihres Cloud Storage-Buckets multiregional ist, wählen Sie eine dieser Regionen aus, um von der kostenlosen Netzwerknutzung zu profitieren.

Wenn keine überlappende Region verfügbar ist, fallen Gebühren an. Wählen Sie anhand der Cloud Storage-Preisliste für ausgehenden Netzwerktraffic eine Region aus, in der die Gebühren für ausgehenden Netzwerktraffic möglichst gering sind.

Jobs in der Dataflow-UI ansehen und Probleme beheben

Nachdem Sie einen Importjob gestartet haben, können Sie in der Cloud Console im Abschnitt "Dataflow" Details zum Job einschließlich der Logs ansehen.

Dataflow-Jobdetails ansehen

So rufen Sie Details zu einem aktuell ausgeführten Job auf:

  1. Wechseln Sie zur Seite Datenbankdetails für die Datenbank.
  2. Klicken Sie in der Jobstatusmeldung auf Jobdetails in Cloud Dataflow ansehen, was in etwa so aussieht:

    Statusmeldung für laufende Jobs

    Die Cloud Console zeigt Details des Dataflow-Jobs an.

So rufen Sie einen Job auf, den Sie kürzlich ausgeführt haben:

  1. Wechseln Sie zur Seite Datenbankdetails für die Datenbank.
  2. Klicken Sie auf den Tab Import/Export.
  3. Klicken Sie in der Liste auf den Namen des Jobs.

    Die Cloud Console zeigt Details des Dataflow-Jobs an.

So rufen Sie einen Job auf, den Sie vor mehr als einer Woche ausgeführt haben:

  1. Öffnen Sie in der Cloud Console die Seite "Dataflow-Jobs".

    Zur Jobseite

  2. Suchen Sie den Job in der Liste und klicken Sie auf seinen Namen.

    Die Cloud Console zeigt Details des Dataflow-Jobs an.

Dataflow-Logs für einen Job aufrufen

Rufen Sie wie oben beschrieben die Detailseite des Jobs auf und klicken Sie rechts neben dem Jobnamen auf Logs, um die Logs eines Dataflow-Jobs anzusehen.

Wenn ein Job fehlschlägt, suchen Sie in den Logs nach Fehlern. Falls Fehler aufgetreten sind, ist neben Logs die Fehleranzahl zu sehen:

Beispiel für Fehleranzahl neben der Schaltfläche

So sehen Sie sich Jobfehler genauer an:

  1. Klicken Sie auf die Fehleranzahl neben Logs.

    In der Cloud Console können Sie die Logs des Jobs ansehen. Unter Umständen müssen Sie scrollen, um die Fehler einzublenden.

  2. Suchen Sie nach Einträgen mit dem Fehlersymbol Fehlersymbol.

  3. Klicken Sie auf einen Logeintrag, um ihn zu maximieren.

Weitere Informationen zur Fehlerbehebung bei Dataflow-Jobs finden Sie unter Pipelinefehler beheben.

Fehlerbehebung bei fehlgeschlagenen Importjobs

Wenn in Ihren Joblogs die folgenden Fehler angezeigt werden:

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Prüfen Sie die Latenz von 99% auf dem Tab Monitoring Ihrer Cloud Spanner-Datenbank in der Cloud Console. Wenn hohe Werte angezeigt werden (mehrere Sekunden), bedeutet dies, dass die Instanz überlastet ist, was zu Schreibfehlern führt.

Eine Ursache für eine hohe Latenz ist, dass der Dataflow-Job mit zu vielen Workern ausgeführt wird und die Cloud Spanner-Instanz zu stark belastet wird.

Um eine Begrenzung der Anzahl der Dataflow-Worker festzulegen, müssen Sie statt dem Tab Import/Export auf der Instanzdetailseite Ihrer Cloud-Spanner-Datenbank in der Cloud Console den Import unter Verwendung der Dataflow-Vorlage Cloud Storage Avro to Cloud Spanner starten und die maximale Anzahl der Worker wie unten beschrieben angeben:
  • Wenn Sie die Dataflow Console verwenden, befindet sich der Parameter Max. Worker im Abschnitt Optionale Parameter auf der Seite Job aus Vorlage erstellen.

  • Wenn Sie gcloud verwenden, geben Sie das Argument max-workers an. Beispiel:

    gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Die maximale Anzahl von Workern hängt stark von der Datengröße ab. Im Idealfall sollte die gesamte CPU-Auslastung von Spanner zwischen 70 % und 90 % liegen. Dies bietet ein gutes Gleichgewicht zwischen Spanner-Effizienz und fehlerfreier Jobvervollständigung.

Damit dieses Auslastungsziel bei den meisten Schemas/Szenarien erreicht wird, empfehlen wir eine maximale Anzahl von Worker-vCPUs zwischen dem Vier- und Sechsfachen der Anzahl der Spanner-Knoten.

Beispiel: Für eine 10-Knoten-Schlüsselinstanz, die n1-Standard-2-Worker verwendet, würden Sie die maximale Anzahl an Workern auf 25 setzen, was 50 vCPUs ergibt.

Langsam laufende Importjobs optimieren

Wenn Sie die Vorschläge für die Anfangseinstellungen befolgt haben, sollten in der Regel keine weiteren Anpassungen nötig sein. Falls der Job jedoch langsam ausgeführt wird, können Sie einige andere Optimierungen versuchen:

  • Job- und Datenspeicherort optimieren: Führen Sie den Dataflow-Job in der Region der Cloud Spanner-Instanz und des Cloud Storage-Buckets aus.

  • Ausreichende Dataflow-Ressourcen bereitstellen: Sind die Ressourcen für den Dataflow-Job durch die entsprechenden Compute Engine-Kontingente eingeschränkt, sind auf der Dataflow-Seite des Jobs in der Google Cloud Console ein Warnsymbol Warnsymbol und Logmeldungen zu sehen:

    Screenshot der Kontingentlimitwarnung

    In diesem Fall kann das Erhöhen der Kontingente für CPUs, verwendete IP-Adressen und nichtflüchtigen Standardspeicher die Ausführungszeit des Jobs verkürzen, aber auch höhere Compute Engine-Gebühren zur Folge haben.

  • Cloud Spanner-CPU-Auslastung prüfen: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, können Sie die Anzahl der Knoten in dieser Instanz erhöhen. Die zusätzlichen Knoten liefern mehr Cloud Spanner-Ressourcen, damit der Job schneller ausgeführt wird, aber es fallen auch höhere Cloud Spanner-Gebühren an.

Faktoren, die sich auf die Leistung von Importjobs auswirken

Mehrere Faktoren beeinflussen die Zeit, die für einen Importjob benötigt wird.

  • Größe der Cloud Spanner-Datenbank: Die Verarbeitung von mehr Daten erfordert mehr Zeit und Ressourcen.

  • Cloud Spanner-Datenbankschema: Die Anzahl der Tabellen, die Größe der Zeilen, die Anzahl der sekundären Indexe und die Anzahl der Fremdschlüssel beeinflussen die Zeit, die zum Ausführen eines Importjobs erforderlich ist. Die Index- und Fremdschlüsselerstellung läuft nach Abschluss des Dataflow-Importjobs weiter.

  • Datenspeicherort: Daten werden mit Dataflow zwischen Cloud Spanner und Cloud Storage übertragen. Idealerweise befinden sich alle drei Komponenten in derselben Region. Wenn das nicht der Fall ist, dauert das regionsübergreifende Verschieben der Daten länger.

  • Anzahl der Dataflow-Worker: Über Autoscaling wählt Dataflow die Anzahl der Worker für einen Job abhängig vom Arbeitsumfang aus. Diese Anzahl wird jedoch durch die Kontingente für CPUs, verwendete IP-Adressen und nichtflüchtigen Standardspeicher begrenzt. In der Dataflow-UI ist ein Warnsymbol zu sehen, wenn Kontingentobergrenzen erreicht werden. Dann ist die Ausführung langsamer, aber der Job sollte dennoch abgeschlossen werden.

  • Bestehende Auslastung von Cloud Spanner: Ein Importjob stellt eine beträchtliche CPU-Last für eine Cloud Spanner-Instanz dar. Wenn die Instanz jedoch bereits eine erhebliche bestehende Auslastung aufweist, wird der Job langsamer ausgeführt.

  • Anzahl der Cloud Spanner-Knoten: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, wird der Job langsamer ausgeführt.