Cloud Storage mit Big Data verwenden

Cloud Storage spielt beim Speichern und Arbeiten mit Big Data in Google Cloud eine wichtige Rolle. Sie können beispielsweise Cloud Storage verwenden, um Daten in BigQuery zu laden, Staging-Dateien und temporäre Daten für Dataflow-Pipelines zu speichern und mit Dataproc zu integrieren, damit Sie Apache Hadoop- oder Apache Spark-Jobs direkt für Ihre Daten in Cloud Storage ausführen können.

Auf dieser Seite wird beschrieben, wie Sie mit dem gcloud-Befehlszeilentool Big Data-Aufgaben ausführen, z. B. große Dateien parallel kopieren oder viele Dateien parallel kopieren. Eine Einführung in gcloud finden Sie im Schnellstart zu gcloud.

Hinweise

Führen Sie die folgenden Schritte aus, um die auf dieser Seite gezeigten Beispiele optimal zu nutzen:

Viele Dateien in einen Bucket kopieren

Mit dem Befehl cp wird eine große Anzahl von Dateien effizient hochgeladen, indem nach Bedarf automatisch parallele (Multi-Threaded/Multi-Verarbeitung)-Kopien ausgeführt werden. Zum rekursiven Kopieren von Unterverzeichnissen verwenden Sie das Flag --recursive im Befehl. So können Sie beispielsweise Dateien mit Unterverzeichnissen aus einem lokalen Verzeichnis namens top-level-dir in einen Bucket kopieren:

gcloud storage cp top-level-dir gs://example-bucket --recursive

Um einen bestimmten Satz an Namen in einem Vorgang zusammenzufassen, können Sie Platzhalter verwenden. So kopieren Sie beispielsweise nur Dateien, die mit image beginnen:

gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive

Mit demselben Platzhalter können Sie auch Dateien entfernen:

gcloud storage rm gs://example-bucket/top-level-dir/subdir/image*

Zusätzlich zum Kopieren lokaler Dateien in die Cloud und umgekehrt können Sie diese auch innerhalb der Cloud kopieren:

gcloud storage cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

gcloud storage erkennt automatisch, dass Sie mehrere Dateien verschieben, und erstellt sie in einem neuen Verzeichnis mit dem Namen subdir2.

Lokales Verzeichnis synchronisieren

Zum Synchronisieren eines lokalen Verzeichnisses mit einem Bucket oder umgekehrt verwenden Sie den Befehl gcloud storage rsync. So sorgen Sie zum Beispiel dafür, dass gs://example-bucket dem Inhalt des lokalen Verzeichnisses local-dir entspricht:

gcloud storage rsync local-dir gs://example-bucket --recursive

Wenn Sie das Flag --delete-unmatched-destination-objects verwenden, signalisiert es dem Befehl, Dateien am Ziel (gs://example-bucket im obigen Befehl) zu löschen, die in der Quelle (local-dir) nicht vorhanden sind. Sie können auch zwischen zwei Buckets synchronisieren.

Große Dateien in einen Bucket kopieren

Bei der Arbeit mit Big Data gilt im Allgemeinen, dass Ihre Daten in der Cloud bleiben sollten, sobald sie dort sind. Nachdem Sie die Daten in Google Cloud gespeichert haben, lassen sie sich sehr schnell in andere Dienste am selben Standort übertragen, z. B. in Compute Engine.

So kopieren Sie eine große lokale Datei in einen Bucket:

gcloud storage cp local-file gs://example-bucket

So kopieren Sie eine große Datei aus einem vorhandenen Bucket:

gcloud storage cp gs://example-source-bucket/file  gs://example-destination-bucket

gcloud storage nutzt dabei die Cloud Storage-Funktionen für fortsetzbare Uploads und Downloadfunktionen. Bei großen Dateien ist dies besonders wichtig, da die Wahrscheinlichkeit eines Netzwerkfehlers bei Ihrem ISP mit dem Umfang der übertragenen Daten zunimmt. Durch die Wiederaufnahme eines Uploads je nachdem, wie viele Byte der Server tatsächlich empfangen hat, vermeidet gcloud storage das erneute Senden von Daten und sorgt dafür, dass der Upload abgeschlossen werden kann. Die gleiche Logik wird für Downloads basierend auf der Größe der lokalen Datei angewendet.

Bucket konfigurieren

Typische Big Data-Aufgaben, für die Sie einen Bucket konfigurieren, umfassen beispielsweise das Verschieben von Daten in eine andere Speicherklasse, das Konfigurieren der Objektversionsverwaltung, oder das Einrichten einer Lebenszyklusregel.

Sie können die Konfigurationsdetails eines Buckets mit buckets describe auflisten:

gcloud storage buckets describe gs://example-bucket

Die Ausgabe enthält die Bucket-Konfigurationsinformationen, von denen die meisten auch über gcloud storage konfiguriert werden können:

  • CORS: steuert die Einstellungen für die Cross-Origin-Ressourcenfreigabe für einen Bucket.
  • Website: ermöglicht Objekten im Bucket, als Webseiten zu fungieren oder als statische Elemente auf einer Website verwendet zu werden.
  • Versionierung: veranlasst Objektlöschungen im Bucket, um nicht aktuelle Versionen zu erstellen.
  • Speicherklasse: ermöglicht das Festlegen der Speicherklasse beim Erstellen eines Buckets.
  • Lebenszyklus: ermöglicht die Ausführung regelmäßiger Vorgänge für einen Bucket (am häufigsten das Löschen veralteter Objekte).

Wenn Sie Dateien in einem bestimmten Bucket nur einen Tag aufbewahren möchten, können Sie die Lebenszyklusregel für den Bucket z. B. so einrichten:

echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json

Damit werden alle Objekte in Ihrem Bucket, die älter als einen Tag sind, automatisch daraus gelöscht. Mit dem Befehl buckets describe können Sie die gerade festgelegte Konfiguration überprüfen (andere Konfigurationsbefehle funktionieren ähnlich):

gcloud storage buckets describe gs://example-bucket

Daten in einem Bucket freigeben

Beim Umgang mit Big Data werden Sie wahrscheinlich gemeinsam mit anderen an Dateien arbeiten und müssen in der Lage sein, bestimmten Personen oder Gruppen Zugriff zu gewähren. Mit Richtlinien für Identity and Access Management können Sie festlegen, wer auf Ihre Dateien zugreifen kann und welche Berechtigungen diese Nutzer erhalten. Sie können die IAM-Richtlinie eines Buckets mit dem Befehl buckets get-iam-policy anzeigen lassen:

gcloud storage buckets get-iam-policy gs://example-bucket

In der Antwort auf den Befehl werden Hauptkonten und Rollen angezeigt. Hauptkonten sind hierbei Konten, die Zugriff auf Ihren Bucket haben, und Rollen sind Gruppen mit Berechtigungen, die den Hauptkonten gewährt wurden.

Drei gängige Szenarien für die Freigabe von Daten sind die öffentliche Freigabe, die Freigabe für eine Gruppe und die Freigabe für eine Person:

  • Öffentlich teilen: Für einen Bucket, dessen Inhalt von jedem im Internet aufgelistet und gelesen werden soll, können Sie die IAM-Richtlinie mit der Bezeichnung "AllUsers" konfigurieren:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=allUsers --role=roles/storage.objectViewer

  • Freigabe für eine Gruppe: Für Mitbearbeiter, die keinen Zugriff auf Ihre anderen Google Cloud-Ressourcen haben, empfehlen wir, eine Google-Gruppe zu erstellen und dann die Google-Gruppe zum Bucket hinzuzufügen Wenn Sie beispielsweise Zugriff auf die Google-Gruppe my-group gewähren möchten, können Sie die folgende IAM-Richtlinie konfigurieren:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=group:my-group@googlegroups.com --role=roles/storage.objectViewer

    Weitere Informationen finden Sie unter Eine Gruppe für die Zugriffssteuerung verwenden.

  • Freigabe für eine Person: Verwenden Sie für viele Mitbearbeiter eine Gruppe, um Zugriff im Bulk zu gewähren. So gewähren Sie einer Person Lesezugriff:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=user:liz@gmail.com --role=roles/storage.objectViewer

Bucket bereinigen

Mit dem folgenden Befehl können Sie einen Bucket schnell bereinigen:

gcloud storage rm gs://example-bucket/ --recursive

Mit Prüfsummen arbeiten

Wenn Sie Kopien erstellen, können Sie mit den Befehlen gcloud storage cp und gcloud storage rsync überprüfen, ob die Prüfsumme der Quelldatei mit der Prüfsumme der Zieldatei übereinstimmt. Sollte dies ausnahmsweise nicht der Fall sein, löscht gcloud storage die ungültige Kopie und gibt eine Warnmeldung aus. Weitere Informationen finden Sie unter Prüfsummenverifizierung.

Mit gcloud storage können Sie auch die Prüfsumme einer Datei in einem Bucket abrufen oder die Prüfsumme eines lokalen Objekts berechnen. Nehmen wir zum Beispiel an, Sie kopieren eine Datei mit öffentlichen Daten aus Cloud Life Sciences in Ihren Arbeits-Bucket mit:

gcloud storage cp gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf gs://example-bucket

Jetzt können Sie die Prüfsummen der öffentlichen Bucket-Version der Datei und der Dateiversion in Ihrem Bucket abrufen, um sicherzustellen, dass sie übereinstimmen:

gcloud storage objects describe gs://example-bucket/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf
gcloud storage objects describe gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf

Angenommen, Ihre Daten befinden sich in einer Datei in einem lokalen Rechenzentrum und Sie haben die Dateien in Cloud Storage kopiert. Mit gcloud storage hash können Sie die Prüfsumme Ihrer lokalen Datei abrufen und mit der Prüfsumme der Datei vergleichen, die Sie in einen Bucket kopiert haben. Die Prüfsumme einer lokalen Datei rufen Sie folgendermaßen ab:

gcloud storage hash local-file

MD5-Werte

Bei nicht zusammengesetzten Objekten gibt gcloud storage objects describe für ein Objekt in einem Bucket folgende Ausgabe aus:

bucket: example-bucket
contentType: text/plain
crc32c: FTiauw==
customTime: '1970-01-01T00:00:00+00:00'
etag: CPjo7ILqxsQCEAE=
generation: '1629833823159214'
id: example-bucket/100MBfile.txt/1629833823159214
kind: storage#object
md5Hash: daHmCObxxQdY9P7lp9jj0A==
...

Bei einer lokalen Datei gibt gcloud storage hash dagegen Folgendes aus:

---
crc32c_hash: IJfuvg==
digest_format: base64
md5_hash: +bqpwgYMTRn0kWmp5HXRMw==
url: file.txt

Beide Ausgaben haben einen CRC32c- und einen MD5-Wert. Für zusammengesetzte Objekte gibt es keinen MD5-Wert, z. B. für aus parallelen zusammengesetzten Uploads erstellte Objekte.

Nächste Schritte