Cloud Storage mit Big Data verwenden

Cloud Storage spielt beim Speichern und Arbeiten mit Big Data in Google Cloud eine wichtige Rolle. Hier einige Beispiele:

  • Laden von Daten in BigQuery

  • Verwenden von Dataproc, um den HDFS-kompatiblen Cloud Storage-Connector automatisch zu installieren und die Nutzung von Cloud Storage-Buckets parallel zu HDFS zu ermöglichen.

  • Verwenden eines Buckets zum Speichern von Staging-Dateien und temporären Daten für Dataflow-Pipelines.

Für Dataflow ist ein Cloud Storage-Bucket erforderlich. Für BigQuery und Dataproc ist der Einsatz eines Cloud Storage-Buckets optional, wird jedoch empfohlen.

gsutil ist ein Befehlszeilentool, mit dem Sie problemlos und stabil mit Cloud Storage-Buckets und -Objekten arbeiten können, insbesondere in Big Data-Szenarien. Mit gsutil können Sie beispielsweise viele Dateien mit einem einzigen Befehl parallel übertragen, große Dateien effizient kopieren, Prüfsummen für Ihre Daten berechnen und die Leistung von Ihrem lokalen Computer zu Cloud Storage messen.

Auf dieser Seite geht es um den Einsatz von gsutil für Big Data-Aufgaben. Eine kürzere Einführung in gsutil finden Sie unter Schnellstart: gsutil-Tool verwenden. Eine ausführliche Dokumentation für alle gsutil-Befehle finden Sie online und in der integrierten Hilfe, die Sie mit dem Befehl gsutil help aufrufen können.

Damit Sie die auf dieser Seite gezeigten Beispiele optimal nutzen können, benötigen Sie Folgendes:

Viele Dateien in einen Bucket kopieren

Wenn Sie eine große Anzahl von Dateien hochladen möchten, können Sie mit der Option gsutil -m eine parallele Kopie (Multi-Threaded/Multi-Verarbeitung) erstellen. Zum rekursiven Kopieren von Unterverzeichnissen verwenden Sie das Flag -R des Befehls cp. So können Sie beispielsweise Dateien mit Unterverzeichnissen aus einem lokalen Verzeichnis namens top-level-dir in einen Bucket kopieren:

gsutil -m cp -R top-level-dir gs://example-bucket

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:

gsutil -m cp -R top-level-dir/subdir/image* gs://example-bucket

Mit demselben Platzhalter können Sie auch Dateien entfernen:

gsutil -m 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:

gsutil -m cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

gsutil 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 gsutil rsync. So sorgen Sie zum Beispiel dafür, dass gs://example-bucket dem Inhalt des lokalen Verzeichnisses local-dir entspricht:

gsutil -m rsync -r local-dir gs://example-bucket

Mit dem Flag rsync -d weisen Sie gsutil an, Dateien am Zielspeicherort (im obigen Befehl gs://example-bucket) zu löschen, die in der Quelle (local-dir) nicht vorhanden sind. Eine Synchronisation zweier Buckets ist auch möglich.

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 die Cloud von Google geladen haben, lassen sie sich sehr schnell in andere Dienste wie Compute Engine übertragen. Außerdem ist ausgehender Traffic aus Buckets an Google Cloud-Dienste am selben Standort oder an einem untergeordneten Standort kostenlos. Weitere Informationen finden Sie unter Netzwerkpreise.

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

gsutil cp local-file gs://example-bucket

So kopieren Sie eine Datei aus einem vorhandenen Bucket (z. B. öffentliche Cloud Storage-Daten):

gsutil cp gs://example-source-bucket/file  gs://example-destination-bucket

gsutil nutzt dabei die Google Cloud Storage-Funktionen für fortsetzbare Uploads und Downloads. 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 gsutil 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.

Wenn gsutil cp nicht die Leistung liefert, die Sie für das Hochladen großer Dateien benötigen, können Sie parallele zusammengesetzte Uploads konfigurieren.

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 des Logzugriffs, das Konfigurieren der Objektversionierung oder das Einrichten einer Lebenszyklusregel.

Sie können die Konfigurationsdetails eines Buckets mit gsutil ls -L -b auflisten:

gsutil ls -L -b gs://example-bucket

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

  • CORS: steuert die Einstellungen für die Cross-Origin-Ressourcenfreigabe für einen Bucket.
  • Logging: ermöglicht das Aufzeichnen der Bucket-Nutzung.
  • 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
gsutil lifecycle set lifecycle_config.json gs://example-bucket

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

gsutil lifecycle get 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 gsutil iam anzeigen lassen:

gsutil iam get gs://example-bucket

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

Sie können Ihren Bucket so konfigurieren, dass jeder mit einem Google-Konto die Dateien in Ihrem Bucket auflisten und anzeigen kann:

gsutil iam ch AllAuthenticatedUsers:objectViewer gs://example-bucket

In den folgenden Abschnitten werden drei gängige Szenarien für die öffentliche Freigabe von Daten, die Freigabe in einer Gruppe und die Freigabe für eine bestimmte Person beschrieben.

Öffentlich

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:

gsutil iam ch AllUsers:objectViewer gs://example-bucket

Für eine Gruppe

Für Mitbearbeiter, die nicht Mitglieder Ihres Google Cloud-Projekts sind, empfehlen wir Ihnen, eine Google-Gruppe zu erstellen und diese dann dem Bucket hinzuzufügen. Für die Google-Gruppe gs-announce konfigurieren Sie beispielsweise Folgendes:

gsutil iam ch group:gs-announce@googlegroups.com:objectViewer gs://example-bucket

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

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:

gsutil iam ch user:liz@gmail.com:objectViewer gs://example-bucket

Zeigen, wie viele Daten in einem Bucket sind

Mit dem Befehl gsutil du können Sie den Gesamtspeicherplatz aufrufen, der von allen Objekten für einen bestimmten Bucket belegt wird. Beispiel:

gsutil du -sh gs://example-bucket

In der Hilfe zum Befehl gsutil du finden Sie weitere Optionen und erfahren beispielsweise, wie Sie die Größe aller Objekte unter einem Präfix abrufen.

Sie können auch Cloud Monitoring verwenden, um einmal pro Tag automatisch einen Bericht über die Gesamtgröße des Buckets zu erhalten. Weitere Informationen finden Sie unter Größe eines Buckets ermitteln. Wenn ein Bucket eine große Zahl an Objekten enthält (z. B. Hunderttausende oder Millionen), ist dies eine wesentlich effizientere Möglichkeit, den Speicherbedarf zu erfassen. Der Befehl gsutil du nutzt dazu Anfragen zur Bucket-Auflistung, die bei großen Buckets sehr lange dauern können.

Die Anzahl der Dateien in einem Bucket ermitteln Sie mit dem folgenden Befehl:

gsutil ls gs://example-bucket/** | wc -l

Bucket bereinigen

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

gsutil -m rm gs://example-bucket/**

Mit Prüfsummen arbeiten

Wenn Sie Kopien erstellen, können Sie mit den Befehlen gsutil cp und gsutil 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 gsutil die ungültige Kopie und gibt eine Warnmeldung aus. Weitere Informationen finden Sie unter Prüfsummenverifizierung.

Mit gsutil können Sie auch die Prüfsumme einer Datei in einem Bucket abrufen oder die Prüfsumme eines lokalen Objekts berechnen. Beispiel: Sie verwenden folgenden Befehl, um eine Cloud Life Sciences-Datei mit öffentlichen Daten in Ihren aktiven Bucket zu kopieren:

gsutil -m 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:

gsutil ls -L gs://example-bucket/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf
gsutil ls -L 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 gsutil 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:

gsutil hash local-file

MD5-Werte

Bei nicht zusammengesetzten Objekten gibt gsutil ls -L für ein Objekt in einem Bucket folgende Informationen aus:

gs://example-bucket/100MBfile.txt:
        Creation time:          Thu, 26 Mar 2015 20:11:51 GMT
        Content-Length:         102400000
        Content-Type:           text/plain
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==
        ETag:                   CPjo7ILqxsQCEAE=
        Generation:             1427400711419000
        Metageneration:         1
        ACL:            [
        ....

Bei einer lokalen Datei gibt gsutil hash dagegen Folgendes aus:

Hashing     100MBfile.txt:
Hashes [base64] for 100MBfile.txt:
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==

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.