Aller au contenu

Utiliser le stockage objet (S3) depuis la plateforme de calcul

Les utilitaires rclone, s3cmd et s3fs sont disponibles sur la plateforme de calcul VALERIA. Ces outils permettent de manipuler les données du stockage objet (S3). Ils permettent aussi de "monter" un compartiment afin que son contenu soit accessible sur la plateforme de calcul.

Prérequis

  • Avoir configuré les clients S3 sur la plateforme de calcul.

Astuce

Un outil a été développé par l'équipe de VALERIA pour automatiser la configuration des principaux clients S3 (rclone, s3cmd, s3fs et awscli) sur la plateforme de calcul. Pour lancer la configuration, il suffit de lancer la commande val-generate-s3-config sur une invite de commande.

Exemples d'utilisation

Créer un compartiment

rclone mkdir s3://<COMPARTIMENT>
s3cmd mb s3://<COMPARTIMENT>

Lister mes compartiments

rclone lsd s3:
s3cmd ls

Lister le contenu d'un compartiment

Note

Par défaut, l'outil rclone liste de manière récursive. Ce n'est pas le cas avec s3cmd.

  • Pour limiter la récursion avec rclone, utiliser l'option --max-depth 1.
  • Pour lister de manière récursive avec s3cmd, utiliser l'option -r.

Taille et chemin des objets seulement :

rclone ls s3:<COMPARTIMENT>

Taille, date et chemin des objets :

rclone lsl s3:<COMPARTIMENT>

Lister les dossiers seulement :

rclone lsd s3:<COMPARTIMENT>

Lister la racine du compartiment :

s3cmd ls s3://<COMPARTIMENT>

Lister un dossier spécifique d'un compartiment :

s3cmd ls s3://<COMPARTIMENT>/<DOSSIER>/

Lister récursivement un compartiment :

s3cmd ls -r s3://<COMPARTIMENT>

Copier des fichiers

Info

La commande rclone copy ne recopie pas les fichiers qui sont déjà présents. Aussi, aucune suppression n'est effectuée sur la destination. S'il est désiré de rendre la destination identique à la source, utiliser la commande rclone sync.

Copier un fichier seul :

rclone copy --progress fichier.txt s3:/<COMPARTIMENT>
rclone copy --progress fichier.txt s3:/<COMPARTIMENT>/<DOSSIER>/
rclone copy --progress fichier.txt s3:/<COMPARTIMENT>/<DOSSIER>/<NOUVEAU NOM>.txt

Copier un dossier complet :

rclone copy --progress /chemin/dossier/ s3://<COMPARTIMENT>/
rclone copy --progress /chemin/dossier/ s3://<COMPARTIMENT>/<DOSSIER>

Syntaxe:

s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]
s3cmd put <FICHIER> s3://<COMPARTIMENT>/
s3cmd put <FICHIER> s3://<COMPARTIMENT>/<DOSSIER>

Synchroniser des fichiers

Rend la destination identique à la source. Si vous ne désirez pas supprimer les fichiers à la destination, utiliser la commande rclone copy.

Référence :

rclone sync source:path dest:path [flags]

Référence :

s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX]
s3cmd sync s3://BUCKET[/PREFIX] LOCAL_DIR
s3cmd sync s3://BUCKET[/PREFIX] s3://BUCKET[/PREFIX]

Consulter mon utilisation

Attention

Ces commandes nécessitent de naviguer à travers tout votre stockage objet (S3) et doivent effectuer un grand nombre de requêtes vers celui-ci. Il est avisé d'utiliser ces commandes avec parcimonie et d'en faire bon usage.

Rclone est le meilleur outil pour consulter votre utilisation, autant pour le nombre d'objets ou la taille occupée.

rclone size

Affiche simplement la taille totale et le nombre d'objets :

  • pour l'ensemble de votre stockage s3 : rclone size s3:
  • pour un compartiment en particulier : rclone size s3:<COMPARTIMENT>

rclone ncdu

Permet de visualiser et naviguer de manière interactive votre stockage distant :

  • pour visualiser l'ensemble de vos compartiments et leur taille : rclone ncdu s3:
  • pour visualiser directement un compartiment : rclone ncdu s3://<COMPARTIMENT>

Supprimer un fichier

rclone deletefile s3://<COMPARTIMENT>/<FICHIER>
s3cmd rm s3://<COMPARTIMENT>/<FICHIER>

Supprimer un dossier et son contenu

rclone delete s3://<COMPARTIMENT>/<DOSSIER>/
s3cmd del --recursive s3://<COMPARTIMENT>/<DOSSIER>/

Supprimer un compartiment et son contenu

Attention

Ces actions sont irréversibles : sans prise de copie au préalable, ces instructions suppriment définitivement un compartiment et son contenu.

rclone purge s3:<COMPARTIMENT>
s3cmd del --recursive s3://<COMPARTIMENT>
s3cmd rb s3://<COMPARTIMENT>

Monter un compartiment

Il est possible de monter un compartiment afin qu'il soit accessible comme si c'était un système de fichier POSIX, comme sur la plateforme de calcul.

Rappel

Sur la plateforme de calcul, il faut avoir configuré les clients S3 en exécutant l'utilitaire /public/utils/val-generate-s3-config

Exporter le nom du compartiment que vous voulez monter :

export COMPARTIMENT=<COMPARTIMENT>

Exécuter ensuite ces commandes pour créer le point de montage et effectuer le montage :

mkdir -p ~/s3/${COMPARTIMENT}
s3fs ${COMPARTIMENT} ~/s3/${COMPARTIMENT} -o url=https://s3.valeria.science
mkdir -p ~/s3/${COMPARTIMENT}
rclone mount s3:${COMPARTIMENT} ~/s3/${COMPARTIMENT}

Maintenant, les fichiers sont accessibles dans le dossier ~/s3/${COMPARTIMENT}.

À la fin de la tâche, quelle soit à partir d'un terminal ou de jupyterlab, tous les points de montages seront démontés.

Python

Pour plus de détails sur les installation de module et les environnements virtuels Python, veuillez visiter la section correspondante.

Exemple de code pour consommer les fichiers directement dans le stockage objet (S3) à l'aide de Pandas :

import s3fs
import pandas as pd

ENDPOINT_URL = 'https://s3.valeria.science'

bucket = 'taxidata'
key = 'fhv_tripdata_2017-03.csv'

df = pd.read_csv(f"s3://{bucket}/{key}",
                 storage_options={"client_kwargs": {'endpoint_url': ENDPOINT_URL}})

df.head()

Traitements en lots

Il existe 3 options pour effectuer des traitements en lots sur des données hébergées sur le stockage objet (S3) de VALERIA.

Option 1 - Copier les données dans le stockage haute-performance (Lustre)

Soit dans vos répertoires $HOME, $HOME/scratch/ ou les répertoires sous $HOME/projects/.

Cette option est à privilégier si les données sont lus répétitivement depuis plusieurs tâches distribuées sur plusieurs serveurs.

L'accès aux données sera moins performant que l'option 2, mais les données ne seront copiés qu'une fois.

Option 2 - Copier les données localement

Soit dans un répertoire « localscratch » créé avec la commande val-mktemp-dir.

À privilégier si les données doivent être lues répétitivement depuis un seul serveur.

Option 3 - Monter le compartiment S3 avec rclone/s3fs

Cette option permet d'accéder aux données S3 directement en émulant un système de fichiers POSIX. Elle est à privilégier si les accès sont séquentiels ou non-répétitifs sur les mêmes données. Contrairement à l'option 1, on accède immédiatement aux données, car il n'y a pas d'étape de copie.

Avantages :

  • Permet de ne pas modifier son code existant, si celui-ci consomme déjà des fichiers dans un système de fichier « régulier »
  • Rend le code plus portable avec les personnes collaboratrices
  • Le code nécessaire pour consommer directement les fichiers dans S3 est souvent plus complexe

Pour plus d'informations sur cette option, veuillez consulter la section Monter un compartiment ci-dessus.

Liens utiles