Utiliser Cloud Storage avec le big data

Cloud Storage est un élément clé permettant de stocker des données et d'utiliser le big data sur Google Cloud. Par exemple, vous pouvez utiliser Cloud Storage pour charger des données dans BigQuery, conserver des fichiers de préproduction et des données temporaires pour les pipelines Dataflow, et les intégrer à Dataproc. Vous pouvez donc exécuter des tâches Apache Hadoop ou Apache Spark directement sur vos données dans Cloud Storage.

Cette page explique comment utiliser l'outil de ligne de commande gcloud pour accomplir des tâches de big data, telles que la copie de fichiers volumineux ou de nombreux fichiers en parallèle. Pour une présentation de gcloud, consultez le Guide de démarrage rapide de gcloud.

Avant de commencer

Pour tirer pleinement parti des exemples présentés sur cette page, vous devez effectuer les opérations suivantes (si ce n'est pas déjà fait) :

Copier plusieurs fichiers dans un bucket

La commande cp importe efficacement un grand nombre de fichiers en effectuant automatiquement des copies parallèles (multithread/multitraitement). Pour copier les sous-répertoires de manière récursive, utilisez l'option --recursive de la commande. Par exemple, pour copier des fichiers incluant des sous-répertoires à partir d'un répertoire local nommé top-level-dir dans un bucket, vous pouvez exécuter la commande suivante :

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

Vous pouvez utiliser des caractères génériques correspondant à un ensemble spécifique de noms pour une opération. Par exemple, pour ne copier que les fichiers commençant par image :

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

Vous pouvez supprimer des fichiers à l'aide du même caractère générique :

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

En plus de copier des fichiers locaux dans le cloud et inversement, vous pouvez également effectuer des copies directement dans le cloud. Exemple :

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

gcloud storage détecte automatiquement que vous déplacez plusieurs fichiers et les crée dans un nouveau répertoire nommé subdir2.

Synchroniser un répertoire local

Pour synchroniser un répertoire local avec un bucket, ou inversement, vous pouvez exécuter la commande gcloud storage rsync. Par exemple, pour que gs://example-bucket corresponde au contenu du répertoire local local-dir, vous pouvez exécuter la commande suivante :

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

Si vous utilisez l'option --delete-unmatched-destination-objects, elle indique à la commande de supprimer, à l'emplacement de destination (gs://example-bucket dans la commande ci-dessus) les fichiers qui ne figurent pas dans la source (local-dir). Vous pouvez également synchroniser deux buckets.

Copier des fichiers volumineux dans un bucket

Lorsque vous travaillez avec le big data, vos données sont généralement conservées dans le cloud après leur transfert. Une fois vos données chargées dans Google Cloud, vous pouvez rapidement les transférer vers d'autres services au même emplacement, tels que Compute Engine.

Pour copier un fichier local volumineux dans un bucket, exécutez la commande suivante :

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

Pour copier un fichier volumineux à partir d'un bucket existant, exécutez la commande suivante :

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

gcloud storage tire pleinement parti des fonctionnalités d'importation avec reprise et de téléchargement de Cloud Storage. C'est un point particulièrement important pour les fichiers volumineux, car la probabilité d'une panne réseau chez votre FAI augmente avec la taille des données transférées. En reprenant une importation en fonction du nombre d'octets réellement reçus par le serveur, gcloud storage évite de renvoyer inutilement des octets et garantit la réussite de l'importation. La même logique s'applique pour les téléchargements en fonction de la taille du fichier local.

Configurer un bucket

Vous pouvez configurer un bucket pour des tâches de big data courantes, par exemple lorsque vous déplacez des données vers une autre classe de stockage, ou lorsque vous configurez la gestion des versions des objets ou une règle de cycle de vie.

Vous pouvez répertorier les détails de configuration d'un bucket à l'aide de la commande buckets describe :

gcloud storage buckets describe gs://example-bucket

Examinez les informations de configuration du bucket dans le résultat. La plupart d'entre elles peuvent également être configurées avec l'outil gcloud storage :

  • CORS : contrôle les paramètres de partage des ressources entre origines multiples d'un bucket.
  • Site Web : permet aux objets du bucket d'agir en tant que pages Web ou d'être utilisés en tant qu'éléments statiques d'un site Web.
  • Gestion des versions : supprime les objets du bucket pour créer des versions archivées.
  • Classe de stockage : permet de configurer la classe de stockage définie lors de la création du bucket.
  • Cycle de vie : permet d'exécuter des opérations périodiques sur le bucket. La plus courante est la suppression d'objets obsolètes.

Par exemple, si vous souhaitez uniquement conserver des fichiers dans un bucket spécifique pendant une journée, vous pouvez configurer l'instruction de cycle de vie du bucket à l'aide de la commande suivante :

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

Tous les objets de votre bucket de plus d'une journée seront désormais automatiquement supprimés de ce bucket. Pour valider la configuration que vous venez de définir, exécutez la commande buckets describe (les autres commandes de configuration fonctionnent d'une manière similaire) :

gcloud storage buckets describe gs://example-bucket

Partager des données dans un bucket

En utilisant le big data, vous devrez probablement travailler sur des fichiers de manière collaborative. Vous devez donc être en mesure de donner accès à des personnes ou à des groupes spécifiques. Les stratégies Cloud Identity and Access Management (Cloud IAM) définissent qui peut accéder à vos fichiers et quelles sont les actions autorisées. Vous pouvez afficher la stratégie Cloud IAM d'un bucket à l'aide de la commande buckets get-iam-policy :

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

La réponse à la commande affiche les entités principales, qui sont des comptes autorisés à accéder à votre bucket, et les rôles, qui sont des groupes d'autorisations accordées aux entités principales.

Le partage de données présente trois scénarios courants qui sont le partage en mode public, le partage avec un groupe et le partage avec une personne :

  • Partage en mode public : dans le cas d'un bucket dont le contenu est destiné à être répertorié et lu par tous les internautes, vous pouvez configurer la stratégie IAM à l'aide de la désignation "AllUsers" :

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

  • Partage avec un groupe : pour les collaborateurs qui n'ont pas accès à vos autres ressources Google Cloud, nous vous recommandons de créer un groupe Google et de l'ajouter au bucket. Par exemple, pour accorder l'accès au groupe Google my-group, vous pouvez configurer la stratégie IAM suivante :

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

    Pour en savoir plus, consultez la section Contrôler l'accès aux objets à l'aide d'un groupe.

  • Partage avec une personne : dans le cas de nombreux collaborateurs, utilisez un groupe pour accorder un accès groupé. S'il s'agit d'une seule personne, vous pouvez lui accorder un accès en lecture comme suit :

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

Nettoyer un bucket

Vous pouvez nettoyer rapidement un bucket à l'aide de la commande suivante :

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

Utiliser des sommes de contrôle

Lorsque vous effectuez des copies, les commandes gcloud storage cp et gcloud storage rsync confirment que la somme de contrôle du fichier source correspond à celle du fichier de destination. Dans les rares cas où les sommes de contrôle ne correspondent pas, gcloud storage supprime la copie non valide et affiche un message d'avertissement. Pour en savoir plus, consultez la section Validation de la somme de contrôle de la ligne de commande.

Vous pouvez également calculer la somme de contrôle d'un fichier dans un bucket ou d'un objet local à l'aide de l'outil gcloud storage. Par exemple, supposons que vous copiez un fichier de données publiques Cloud Life Sciences dans votre bucket de travail à l'aide de la commande suivante :

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

Vous pouvez désormais obtenir les sommes de contrôle de la version du fichier du bucket public et de celle de votre bucket pour vous assurer qu'elles correspondent :

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

Supposons maintenant que vos données se trouvent dans un fichier dans un centre de données local, et que vous les avez copiées dans Cloud Storage. La commande gcloud storage hash permet d'obtenir la somme de contrôle de votre fichier local, puis de la comparer à celle du fichier copié dans un bucket. Pour obtenir la somme de contrôle d'un fichier local, exécutez la commande suivante :

gcloud storage hash local-file

Valeurs MD5

L'exécution de la commande gcloud storage objects describe sur des objets non composites dans un bucket renvoie un résultat semblable à celui-ci :

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

L'exécution de la commande gcloud storage hash sur un fichier local renvoie un résultat semblable à celui-ci :

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

Les deux résultats ont une valeur CRC32c et MD5. Les objets composites n'ont pas de valeur MD5, tout comme ceux créés par le biais d'importations composites parallèles.

Étapes suivantes