Cloud Storage mit Big Data verwenden

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

  • Laden von Daten in BigQuery

  • Verwenden von Cloud 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 Cloud Dataflow-Pipelines.

Für Cloud Dataflow ist ein Cloud Storage-Bucket erforderlich. Für BigQuery und Cloud Dataproc kann ein Cloud Storage-Bucket verwendet werden, aber dies ist nicht zu empfehlen.

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 Beispiele auf dieser Seite nachvollziehen können, brauchen 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, wenn sie einmal 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 basierend darauf, 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 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 archivierte 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. Jedes Objekt hat eine Zugriffssteuerungsliste (Access Control List – ACL), in der festgelegt ist, wer auf das Objekt zugreifen kann. Mit dem Befehl gsutil acl können Sie eine nutzerfreundliche Ansicht der ACLs eines Objekts aufrufen:

gsutil acl get gs://example-bucket/file

Die Entität, die das Objekt hochgeladen hat (in diesem Fall Ihr Google-Konto, das durch das OAuth2-Aktualisierungstoken repräsentiert wird), erhält automatisch INHABER-Zugriff auf das Objekt (siehe Projektmitglieder und Berechtigungen).

Der Rest der Zugriffssteuerungsliste für das Objekt hängt von der Standardobjekt-ACL des Buckets ab. Hier kommt es häufig zu Verwechslungen: Die Bucket-Zugriffssteuerungsliste steuert den Zugriff auf den Bucket (z. B. die Fähigkeit, Objekte zu erstellen und aufzulisten), während die Standardobjekt-ACL die Zugriffssteuerungsliste bestimmt, die Objekten bei der Erstellung zugewiesen wird. Die beiden Listen sind nicht unbedingt identisch. Weitere Informationen über die Unterschiede finden Sie im Kapitel Zugriffskontrolloptionen.

Sie können den Bucket so konfigurieren, dass jeder mit einem Google-Konto die darin enthaltenen Dateien auflisten kann. Damit ist jedoch kein Zugriff auf die Daten verbunden. Nutzer sehen also beispielsweise, dass bigfile in Ihrem Bucket enthalten ist, kennen aber den Inhalt nicht.

gsutil acl ch -g 'AllAuthenticatedUsers:R' gs://example-bucket

Die ACL des Buckets rufen Sie mit dem Befehl ls -Lb ab:

gsutil ls -Lb gs://example-bucket

Nun kann jeder, der mit einem Google-Konto authentifiziert ist, Dateien im Bucket auflisten.

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

Einen allgemein lesbaren Bucket konfigurieren Sie so:

# Read access on the bucket so that is contents can be listed
gsutil acl ch -g AllUsers:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g AllUsers:R gs://example-bucket

# Read access to all of its current contents.
gsutil -m acl ch -R -g AllUsers:R gs://example-bucket

Für eine Gruppe

Wenn Sie Daten für Mitbearbeiter freigeben möchten, die nicht Mitglieder Ihres Google Cloud Platform-Projekts sind, sollten Sie eine Google-Gruppe erstellen und diese dann dem Bucket hinzufügen. Für die Google-Gruppe gs-announce konfigurieren Sie beispielsweise Folgendes:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -g 'gs-announce@googlegroups.com:R' gs://example-bucket

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

Für eine Person

Für viele Mitbearbeiter auf einmal: Verwenden Sie eine Gruppe. Für eine einzelne Person: Konfigurieren Sie den Zugriff so:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -u liz@gmail.com:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -u liz@gmail.com:R gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -u liz@gmail.com:R 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 ein Bucket-Logging einrichten, um einmal pro Tag automatisch einen Bericht über die Gesamtgröße des Buckets zu erhalten. Weitere Informationen finden Sie in Zugriffs-Logs. 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. Bei Objekten, die als zusammengesetzte Objekte hochgeladen werden, gibt es keine MD5-Werte. Dies ist zum Beispiel der Fall, wenn Sie für gsutil zusammengesetzte Uploads konfigurieren.

Parallele zusammengesetzte Uploads konfigurieren

Sie können die Leistung beim Hochladen großer Dateien verbessern, indem Sie gsutil so konfigurieren, dass jede Datei in mehrere Teile aufgeteilt wird, diese dann parallel hochgeladen und anschließend mit der Cloud Storage-Funktion für zusammengesetzte Objekte wieder zu einem Objekt zusammengefügt werden. Weitere Informationen finden Sie unter Parallele zusammengesetzte Uploads. Parallele zusammengesetzte Uploads sind standardmäßig deaktiviert.

Bevor Sie parallele zusammengesetzte Uploads konfigurieren, sollten Sie sich mit den Vor- und Nachteilen vertraut machen. Der Hauptvorteil ist, dass Uploads großer Dateien wesentlich schneller sein können, wenn Netzwerk- und Festplattengeschwindigkeit keine begrenzenden Faktoren sind. Parallele zusammengesetzte Uploads haben jedoch folgende Nachteile:

  • Wenn Sie oder Ihre Mitarbeiter gsutil verwenden, um zusammengesetzte Uploads herunterzuladen (wie solche, die mit parallelen zusammengesetzten gsutil-Uploads erstellt wurden), sollten Sie unbedingt ein kompiliertes crcmod-Modul installieren. Dies wird im Abschnitt zu gsutil help crcmod beschrieben. Tun Sie dies nicht, wird Ihnen eine Warnmeldung angezeigt, dass das Herunterladen zusammengesetzter Objekte ohne kompiliertes crcmod sehr langsam ausgeführt wird. Kompiliertes crcmod wird für Downloads unabhängig davon empfohlen, ob die Option für parallele zusammengesetzte Uploads aktiviert ist oder nicht.

  • Zusammengesetzte Objekte in einem Bucket haben keinen MD5-Hash.

Nachdem Sie crcmod gemäß den Schritten in gsutil help crcmod konfiguriert und kompiliert haben, konfigurieren Sie Ihre .boto-Datei so, dass parallele zusammengesetzte Uploads standardmäßig aktiviert sind. Weitere Informationen finden Sie unter gsutil config und insbesondere in den parallel_composite_upload_*-Einstellungen im Abschnitt GSUtil der Datei .boto.

Wenn Sie parallele zusammengesetzte Uploads aktiviert haben und eine große Datei in einen Bucket hochladen, werden Sie feststellen, dass die Datei in 50-MB-Stücken hochgeladen wird und nicht im Ganzen. Falls Fehler aufgetreten sind, z. B. aufgrund temporärer Netzwerkprobleme, können Sie den Kopiervorgang mit dem no-clobber-Flag (-n) noch einmal ausführen, um nur die fehlenden Dateien zu übertragen.

Denken Sie daran, dass für die Überprüfung der Datenintegrität einer Datei in einem Bucket, die als zusammengesetztes Objekt hochgeladen wurde, nur ein CRC32c-Hash-Wert und kein MD5-Wert zur Verfügung steht.

Wenn Sie parallele zusammengesetzte Uploads konfiguriert haben, können temporäre Dateien aus abgebrochenen Uploads übrig bleiben. Falls Sie den Upload nicht fortsetzen möchten, können Sie diese temporären Dateien löschen:

gsutil -m rm gs://example-bucket/**/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp**
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...