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. Voici quelques exemples :

  • Charger des données dans BigQuery

  • Utiliser Dataproc, qui installe automatiquement le connecteur Cloud Storage compatible avec HDFS, ce qui permet d'utiliser des buckets Cloud Storage en parallèle avec HDFS

  • Stocker des fichiers de préproduction et des données temporaires pour les pipelines Dataflow à l'aide d'un bucket

Pour Dataflow, un bucket Cloud Storage est requis. Son utilisation est facultative, mais recommandée, dans BigQuery et Dataproc.

L'outil de ligne de commande gsutil vous permet d'utiliser facilement et efficacement des buckets et des objets Cloud Storage, en particulier dans des scénarios de big data. Par exemple, avec gsutil, vous pouvez copier plusieurs fichiers simultanément en exécutant une seule commande, copier efficacement des fichiers volumineux, calculer des sommes de contrôle sur vos données et mesurer les performances de votre ordinateur local vers Cloud Storage.

Cette page explique comment utiliser gsutil pour les tâches de big data. Pour accéder à une présentation simplifiée de gsutil, consultez la page Démarrage rapide de l'outil gsutil. Vous trouverez la documentation détaillée de toutes les commandes gsutil en ligne et dans l'aide intégrée que vous pouvez obtenir en exécutant la commande gsutil help.

Pour tirer pleinement parti des exemples présentés sur cette page, vous devez disposer des éléments suivants :

Copier plusieurs fichiers dans un bucket

Si vous devez importer un grand nombre de fichiers, vous pouvez effectuer une copie parallèle (copie multithread/multitraitement) à l'aide de l'option gsutil -m. Pour copier les sous-répertoires de manière récursive, utilisez l'option -R de la commande cp. 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 :

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

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 :

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

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

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

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

gsutil 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 gsutil rsync. Par exemple, pour que gs://example-bucket corresponde au contenu du répertoire local local-dir, vous pouvez exécuter la commande suivante :

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

L'option rsync -d signale à gsutil qu'il doit supprimer les fichiers de la destination (gs://example-bucket dans la commande ci-dessus) 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 le cloud de Google, vous pouvez rapidement les transférer vers d'autres services, tels que Compute Engine. En outre, la sortie des buckets vers les services Google Cloud est gratuite s'ils se trouvent au même endroit ou dans un sous-emplacement. Pour en savoir plus, consultez la section Tarifs du réseau.

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

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

Pour copier un fichier volumineux à partir d'un bucket existant (par exemple, les données publiques Cloud Storage), exécutez la commande suivante :

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

L'outil gsutil tire pleinement parti des fonctionnalités d'importation avec reprise et de téléchargement de Google 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, gsutil é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.

Si gsutil cp ne vous offre pas les performances dont vous avez besoin lorsque vous importez des fichiers volumineux, vous pouvez envisager de configurer des importations composites parallèles.

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 l'accès aux journaux, 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 gsutil ls -L -b :

gsutil ls -L -b 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 gsutil :

  • CORS : contrôle les paramètres de partage des ressources entre origines multiples d'un bucket.
  • Journalisation : permet de consigner les données d'utilisation du 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
gsutil lifecycle set lifecycle_config.json gs://example-bucket

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 gsutil lifecycle (les autres commandes de configuration fonctionnent d'une manière similaire) :

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

gsutil iam get gs://example-bucket

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

Vous pouvez configurer votre bucket pour que tous les utilisateurs qui disposent d'un compte Google puissent répertorier et afficher ses fichiers :

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

Les sections suivantes couvrent les trois scénarios courants : partage des données public, avec un groupe et avec une personne.

Partage 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" :

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

Partage avec un groupe

Pour les collaborateurs qui ne sont pas membres de votre projet Google Cloud, nous vous recommandons de créer un groupe Google et de l'ajouter au bucket. Par exemple, pour le groupe Google gs-announce, vous pouvez exécuter les commandes suivantes :

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

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

Partage avec une personne

Si vous avez de nombreux collaborateurs, créez un groupe pour autoriser un accès groupé. S'il s'agit d'une seule personne, vous pouvez lui accorder un accès en lecture comme suit :

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

Afficher la quantité de données d'un bucket

Pour afficher l'espace total utilisé par tous les objets d'un bucket donné, vous pouvez exécuter la commande gsutil du. Exemple :

gsutil du -sh gs://example-bucket

Consultez l'aide de la commande gsutil du pour découvrir les autres options disponibles, y compris celle permettant de renvoyer la taille de tous les objets sous un préfixe.

Vous pouvez également utiliser Cloud Monitoring, où la taille totale d'un bucket est automatiquement enregistrée une fois par jour. Pour en savoir plus, consultez la section Déterminer la taille d'un bucket. Si vous disposez d'un nombre important d'objets dans votre bucket (par exemple, des centaines de milliers ou des millions), il s'agit d'un moyen beaucoup plus efficace de suivre l'utilisation de l'espace de stockage. La commande gsutil du effectue des requêtes de création de listes de buckets pour calculer l'utilisation de cet espace. Cette opération peut prendre beaucoup de temps pour les buckets de grande taille.

Vous pouvez compter le nombre de fichiers dans un bucket à l'aide de la commande suivante :

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

Nettoyer un bucket

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

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

Utiliser des sommes de contrôle

Lorsque vous effectuez des copies, les commandes gsutil cp et gsutil 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, gsutil 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.

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

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

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

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

gsutil hash local-file

Valeurs MD5

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

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

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

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

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.