Spanner Avro-Dateien importieren

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

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 Spanner exportiert wurden.

So importieren Sie eine Spanner-Datenbank mit der REST API oder dem gcloud CLI: führen Sie die Schritte im Abschnitt Vorbereitung aus und lesen Sie dann die detaillierte Anleitung unter Cloud Storage Avro für Spanner.

Hinweise

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

Enable the APIs

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

Kontingentanforderungen

Die Kontingentanforderungen für Importjobs sehen so aus:

  • Spanner: Sie müssen für die zu importierenden Daten ausreichend Rechenkapazität haben. Für den Import einer Datenbank ist keine zusätzliche Rechenkapazität erforderlich. Allerdings benötigen Sie möglicherweise weitere Rechenkapazität, damit der Job in angemessener Zeit abgeschlossen werden kann. Weitere Informationen finden Sie unter Jobs optimieren.
  • Cloud Storage: Zum Importieren benötigen Sie einen Bucket mit Ihren zuvor exportierten Dateien. Sie müssen keine Größe für den Bucket festlegen.
  • 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.

Erforderliche Rollen

Um die Berechtigungen zu erhalten, die Sie zum Exportieren einer Datenbank benötigen, bitten Sie Ihren Administrator, Ihnen folgende IAM-Rollen für das Dataflow-Worker-Dienstkonto:

Optional: Datenbankordner in Cloud Storage suchen

Zum Suchen des Ordners mit der exportierten Datenbank in der Google 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.

  • Eine ChangeStreamName-manifest.json-Datei für jede Änderungsstream in der Datenbank, exportiert.

  • A ChangeStreamName.avro-00000-of-00001 für jeden Änderungsstream. Diese Datei enthält leere Daten nur mit dem Avro-Schema des Änderungsstreams.

Datenbank importieren

So importieren Sie Ihre Spanner-Datenbank aus Cloud Storage in Ihren führen Sie die folgenden Schritte aus.

  1. Rufen Sie die Seite Spanner-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 Menüpunkt Import/Export im linken Bereich und anschließend 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 Spanner während des Importvorgangs erstellt. Der Datenbankname darf in Ihrer Instanz nicht bereits vorhanden sein.

  9. Wählen Sie den Dialekt für die neue Datenbank aus (GoogleSQL oder PostgreSQL).

  10. Optional: Wenn Sie die neue Datenbank mit einem vom Kunden verwalteten Verschlüsselungsschlüssel schützen möchten, klicken Sie auf Verschlüsselungsoptionen anzeigen und wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden aus. Wählen Sie dann einen Schlüssel aus der Drop-down-Liste aus.

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

  12. Optional: Wenn Sie den Dataflow-Pipelinestatus mit einem vom Kunden verwalteten Verschlüsselungsschlüssel verschlüsseln möchten, klicken Sie auf Verschlüsselungsoptionen anzeigen und wählen Sie Vom Kunden verwalteten Verschlüsselungsschlüssel verwenden aus. Wählen Sie dann einen Schlüssel aus der Drop-down-Liste aus.

  13. Klicken Sie das Kästchen unter Belastungen bestätigen an, um zu bestätigen, dass Gebühren zusätzlich zu den Gebühren für Ihre vorhandene Spanner-Instanz.

  14. Klicken Sie auf Importieren.

    In der Google 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 Google 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.

Hinweis zum Importieren von generierten Spalten und Änderungsstreams

Spanner verwendet die Definition jeder generierten Spalte im Avro-Schema, um diese Spalte neu zu erstellen. Spanner berechnet die generierten Spaltenwerte automatisch während des Imports.

Ähnlich verwendet Spanner die Definition jedes Änderungsstreams im Avro-Schema, um ihn beim Import neu zu erstellen. Ändern Streamdaten weder exportiert noch über Avro importiert werden, sodass alle Änderungsstreams, die mit einer neu importierten Datenbank verknüpft sind, keine Änderungsdatensätze.

Hinweis zum Importieren von Sequenzen

Jede Sequenz (GoogleSQL, PostgreSQL) die von Spanner exportiert werden, die GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) um ihren aktuellen Status zu erfassen. Spanner fügt dem Zähler einen Puffer von 1.000 hinzu und schreibt den neuen Zählerwert zu den Eigenschaften des Eintragsfelds. Beachten Sie, dass dies nur ein Ansatz ist, um Fehler bei doppelten Werten zu vermeiden, die nach dem Import auftreten können. Passen Sie den tatsächlichen Sequenzzähler an, wenn mehr Schreibvorgänge in den Quelldatenbank während des Datenexports abrufen.

Beim Import beginnt die Sequenz mit diesem neuen Zähler anstelle des im Schema gefundenen Zählers. Bei Bedarf können Sie die ALTER SEQUENCE (GoogleSQL, PostgreSQL) , um auf einen neuen Zähler zu aktualisieren.

Hinweis zum Importieren von verschränkten Tabellen und Fremdschlüsseln

Der Dataflow-Job kann überlappende Tabellen importieren, sodass Sie die übergeordneten und untergeordneten Beziehungen aus Ihrer Quelldatei beibehalten können. Fremdschlüsseleinschränkungen werden jedoch beim Laden der Daten nicht erzwungen. Dataflow nach Abschluss des Datenladevorgangs alle erforderlichen Fremdschlüssel erstellt.

Wenn es Fremdschlüsseleinschränkungen für die Spanner-Datenbank gibt bevor der Import gestartet wird, können Schreibfehler aufgrund referenzieller Integritätsverstößen. Um Schreibfehler zu vermeiden, sollten Sie alle vorhandenen Fremdschlüssel löschen, bevor Sie mit dem Importvorgang beginnen.

Region für den Importjob auswählen

Sie können eine andere Region auf Grundlage des Standorts Ihres Cloud Storage-Bucket. Um dies zu vermeiden Gebühren für ausgehende Datenübertragung angegeben werden, wählen Sie eine Region aus, mit dem Speicherort Ihres Cloud Storage-Bucket übereinstimmt.

  • Wenn der Speicherort Ihres Cloud Storage-Bucket eine Region ist, gilt Folgendes: können Sie die kostenlose Netzwerknutzung nutzen, indem Sie die dieselbe Region für Ihren Importjob, sofern diese Region verfügbar ist.

  • Wenn sich der Speicherort Ihres Cloud Storage-Buckets in einer Region mit zwei Speicherorten befindet, können Sie von der kostenlosen Netzwerknutzung profitieren, indem Sie eine der beiden Regionen für Ihren Importjob auswählen, sofern eine der Regionen verfügbar ist.

  • Wenn für Ihren Importjob keine am selben Standort befindliche Region verfügbar ist oder Ihr Der Speicherort des Cloud Storage-Bucket ist multiregional Es fallen Gebühren für ausgehende Datenübertragungen an. Wählen Sie anhand der Cloud Storage-Preisliste für Datenübertragungen eine Region aus, in der die Gebühren für die Datenübertragung möglichst gering sind.

Jobs in der Dataflow-UI ansehen und Probleme beheben

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

Dataflow-Jobdetails ansehen

So rufen Sie Details zu allen Import- oder Exportjobs auf, die Sie in der letzten Woche ausgeführt haben, einschließlich aller derzeit ausgeführten Jobs:

  1. Wechseln Sie zur Seite Datenbanküberblick für die Datenbank.
  2. Klicken Sie im linken Bereich auf den Menüpunkt Import/Export. Auf der Datenbankseite Import/Export wird eine Liste der letzten Jobs angezeigt.
  3. Klicken Sie auf der Seite Import/Export der Datenbank in der Spalte Dataflow-Jobname auf den Jobnamen:

    Statusmeldung für laufende Jobs

    In der Google Cloud Console werden Details zum Dataflow angezeigt. Job.

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

  1. Rufen Sie in der Google Cloud Console die Seite „Dataflow-Jobs“ auf.

    ZU JOBS

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

    In der Google Cloud Console werden Details zum Dataflow angezeigt. Job.

Dataflow-Logs für Ihren Job ansehen

Rufen Sie die Details eines Jobs auf, um die Logs eines Dataflow-Jobs anzusehen und dann rechts neben dem Jobnamen auf Logs.

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 "Logs"

So sehen Sie sich Jobfehler genauer an:

  1. Klicken Sie auf die Fehleranzahl neben Protokolle.

    In der Google 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 den Inhalt zu maximieren.

Weitere Informationen zur Fehlerbehebung bei Dataflow-Jobs finden Sie unter Fehler in der Pipeline 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.

Überprüfen Sie die 99% Schreiblatenz in der Tab Monitoring Ihrer Spanner-Datenbank in der Google 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 die hohe Latenz ist, dass der Dataflow-Job ausgeführt wird. Sie verwenden zu viele Worker, wodurch Spanner zu stark belastet wird. Instanz.

Um ein Limit für die Anzahl der Dataflow-Worker anstelle von über den Tab „Importieren/Exportieren“ auf der Seite „Instanzdetails“ Ihres Spanner-Datenbank in der Google Cloud Console erstellen, müssen Sie den Import mit dem Dataflow- Vorlage „Cloud Storage Avro für Spanner“ und geben Sie die maximale Anzahl von Workern an:

Console

Wenn Sie die Dataflow-Konsole verwenden, ist der Wert Max. Worker befindet sich im Bereich Optionale Parameter der Seite Job aus Vorlage erstellen aus.

Zu Dataflow

gcloud

Führen Sie den Befehl gcloud dataflow jobs run aus und 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 \
    --network=network-123

Netzwerkfehler beheben

Der folgende Fehler kann auftreten, wenn Sie Ihre Spanner-Datenbanken exportieren:

Workflow failed. Causes: Error: Message: Invalid value for field
'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface
must specify a subnet if the network resource is in custom subnet mode.
HTTP Code: 400

Dieser Fehler tritt auf, weil Spanner davon ausgeht, dass Sie im selben Projekt wie der Dataflow-Job ein VPC-Netzwerk im automatischen Modus namens default verwenden möchten. Wenn Sie im Projekt kein Standard-VPC-Netzwerk haben oder für Ihr VPC-Netzwerk der benutzerdefinierte Modus gilt, müssen Sie einen Dataflow-Job erstellen und ein alternatives Netzwerk oder Subnetzwerk angeben.

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 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.

  • Spanner-CPU-Auslastung prüfen: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, können Sie die Rechenkapazität in dieser Instanz erhöhen. Die Kapazität erhöht die Kapazität Spanner-Ressourcen und der Job sollten schneller ausgeführt werden, Spanner-Gebühren.

Faktoren, die sich auf die Leistung von Importjobs auswirken

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

  • Spanner-Datenbankgröße: Die Verarbeitung von mehr Daten nimmt mehr Zeit in Anspruch. und Ressourcen.

  • Spanner-Datenbankschema, einschließlich:

    • Die Anzahl der Tabellen
    • Die Größe der Zeilen
    • Anzahl der sekundären Indexe
    • Die Anzahl der Fremdschlüssel
    • Anzahl der Änderungsstreams

Beachten Sie, dass Index und Fremdschlüssel Erstellung wird nach dem Dataflow-Importjob fortgesetzt abgeschlossen wird. Änderungsstreams werden vor Abschluss des Importjobs erstellt. aber nachdem alle Daten importiert wurden.

  • Datenspeicherort: Daten werden zwischen Spanner und Cloud Storage mit Dataflow. 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: Optimale Dataflow-Worker sind für eine gute Leistung erforderlich. Mithilfe von 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. In diesem Fall dauert die Verarbeitung länger, aber der Job sollte dennoch abgeschlossen werden. Autoscaling kann Spanner überlasten, was zu Fehlern führt, große Datenmengen importieren können.

  • Bestehende Auslastung von Spanner: Ein Importjob erhöht die CPU-Auslastung für eine Spanner-Instanz erheblich. Wenn die Instanz jedoch bereits eine erhebliche bestehende Auslastung aufweist, wird der Job langsamer ausgeführt.

  • Menge der Spanner-Rechenkapazität: Wenn die CPU-Auslastung für die Instanz über 65 % liegt, wird der Job langsamer ausgeführt.

Feinabstimmung der Worker für eine gute Importleistung

Beim Starten eines Spanner-Importjobs müssen Dataflow-Worker für eine gute Leistung auf einen optimalen Wert gesetzt sein. Eine zu große Anzahl von Workern überlastet Spanner und zu wenige Worker führen zu einer enttäuschenden Importleistung.

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 ausgewogenes Verhältnis zwischen Spanner und und fehlerfreie Auftragserledigung.

Um dieses Nutzungsziel in den meisten Schemas und Szenarien zu erreichen, empfehlen eine maximale Anzahl von Worker-vCPUs im 4- bis 6-Fachen der Anzahl der Spanner-Knoten.

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