Utiliser Cloud Storage avec le big data

Cloud Storage est un élément clé permettant de stocker et d'utiliser le big data sur Google Cloud Platform. Voici quelques exemples :

  • Charger des données dans BigQuery

  • Utiliser Cloud 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 Cloud Dataflow à l'aide d'un bucket

  • Utiliser un bucket pour importer des données génomiques dans un ensemble de données Cloud Genomics

Vous devez indiquer un bucket Cloud Storage dans Cloud Genomics et Cloud Dataflow. Son utilisation est facultative, mais recommandée, dans BigQuery et Cloud 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, voici ce dont vous avez besoin :

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'indicateur -R de la commande cp. Par exemple, pour copier des fichiers qui contiennent des sous-répertoires 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 copier uniquement les fichiers qui commencent 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

L'outil 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

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

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

L'indicateur rsync -d indique à gsutil de 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 Genomics), 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 pour importer des fichiers volumineux, vous pouvez envisager de configurer des importations composites.

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 instruction de cycle de vie.

Vous avez la possibilité de répertorier les détails de la 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 de la même manière) :

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. Chaque objet dispose d'une liste de contrôle d'accès qui décrit qui peut y accéder. Vous pouvez afficher une vue conviviale des LCA d'un objet à l'aide de la commande gsutil acl :

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

L'entité à l'origine de l'importation de l'objet (dans ce cas, votre compte Google représenté par le jeton d'actualisation OAuth2) obtient automatiquement un accès PROPRIÉTAIRE à l'objet. (Consultez la section Membres du projet et autorisations.)

Le reste de la LCA de l'objet est défini par sa LCA par défaut dans le bucket. Il s'agit d'un point de confusion courant : la LCA du bucket contrôle l'accès au bucket (par exemple, la possibilité de créer et de répertorier des objets), alors que la LCA de l'objet par défaut contrôle la LCA obtenue par les objets lors leur création. Les deux ne sont pas forcément identiques. Pour en savoir plus sur les différences entre ces deux listes de contrôle d'accès, consultez Contrôle des accès.

Vous pouvez configurer votre bucket pour que tous les utilisateurs qui disposent d'un compte Google puissent répertorier ses fichiers. Notez que cela ne leur donne pas accès aux données. Ainsi, les utilisateurs peuvent voir que le fichier bigfile existe dans votre bucket, mais ils ne peuvent pas afficher son contenu.

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

Vous pouvez afficher la LCA du bucket à l'aide de la commande ls -Lb :

gsutil ls -Lb gs://example-bucket

Toute personne authentifiée avec un compte Google peut désormais répertorier des fichiers dans le bucket.

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

Partage public

Pour qu'un bucket soit lisible publiquement, vous pouvez exécuter les commandes suivantes :

# 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

Partage avec un groupe

Pour les collaborateurs qui ne sont pas membres de votre projet Google Cloud Platform, 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 :

# 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

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

Partage avec une personne

Créez un groupe pour plusieurs collaborateurs. Pour partager des données avec une seule personne, vous pouvez configurer l'accès comme suit :

# 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

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

Pour afficher l'espace total utilisé par tous les objets d'un bucket spécifique, exécutez 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 configurer la journalisation du bucket pour que sa taille totale soit automatiquement enregistrée une fois par jour. Pour en savoir plus, consultez la page Journaux d'accès. 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 listes de bucket 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 Google Genomics 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 et de la comparer à celle du fichier que vous avez 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 importés en tant qu'objets composites n'ont pas de valeur MD5, comme lorsque vous configurez des importations composites pour gsutil.

Configurer des importations composites parallèles

Pour améliorer les performances lors de l'importation de fichiers volumineux, configurez gsutil pour importer chaque fichier en le divisant en plusieurs parties, en téléchargeant les parties en parallèle, puis en utilisant la fonction d'objet composite de Cloud Storage pour les regrouper en un objet composite. Pour en savoir plus, consultez la section Importations composites parallèles. Les importations composites parallèles sont désactivées par défaut.

Avant de configurer les importations composites parallèles, vous devez en connaître les avantages et les inconvénients. Le principal avantage est que les importations de fichiers volumineux peuvent être nettement plus rapides si la vitesse du réseau et du disque ne sont pas des facteurs limitants. Les inconvénients des importations composites parallèles sont les suivants :

  • Lorsque vous (ou vos collaborateurs) utilisez gsutil pour télécharger des importations composites (comme celles créées à l'aide d'importations composites parallèles gsutil), nous vous recommandons vivement d'installer une bibliothèque compilée crcmod, comme indiqué dans la documentation relative à gsutil help crcmod. Si vous ne le faites pas, un message vous avertit que le processus d'importation d'objets composites est très lent sans bibliothèque crcmod compilée. Notez que le téléchargement de la bibliothèque crcmod est recommandé, que l'option d'importation composite parallèle soit activée ou non.

  • Les objets composites d'un bucket n'ont pas de hachage MD5.

Lorsque vous avez configuré et compilé la bibliothèque crcmod en suivant les étapes décrites dans la documentation relative à gsutil help crcmod, configurez votre fichier .boto pour que les importations composites parallèles soient activées par défaut. Pour obtenir plus d'informations, consultez la documentation sur la commande gsutil config, en particulier les paramètres parallel_composite_upload_* dans la section GSUtil du fichier .boto.

Si vous avez activé les importations composites parallèles et que vous téléchargez un fichier volumineux dans votre bucket, vous remarquerez que le fichier est importé en parties de 50 Mo au lieu d'être importé en une seule fois. Si des échecs surviennent, par exemple, en raison de problèmes réseau temporaires, vous pouvez exécuter de nouveau la copie à l'aide de l'indicateur no-clobber (-n) pour transmettre uniquement les fichiers manquants.

N'oubliez pas que lors de la vérification de l'intégrité des données dans un fichier d'un bucket importé en tant qu'objet composite, il n'existe qu'une valeur de hachage CRC32c, mais pas de valeur MD5.

Si vous avez configuré des importations composites parallèles, il peut rester des fichiers temporaires issus des importations annulées. Si vous ne souhaitez pas reprendre l'importation, vous pouvez supprimer ces fichiers temporaires :

gsutil -m rm gs://example-bucket/**/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp**

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.