JindoFuse prend en charge l'interface POSIX (Portable Operating System Interface) pour Object Storage Service (OSS) et OSS-HDFS. Il vous permet de monter un bucket OSS ou un chemin OSS-HDFS en tant que répertoire local, afin que les outils Linux standard — ls, mkdir, cat, cp et autres — fonctionnent directement avec OSS ou OSS-HDFS.
JindoFuse n'implémente pas la spécification POSIX dans son intégralité. Il est optimisé pour les charges de travail qui accèdent à OSS ou OSS-HDFS via une interface de système de fichiers. Avant de commencer, consultez la Opérations POSIX prises en charge pour vérifier que les opérations requises par votre charge de travail sont prises en charge.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
-
JindoSDK installé et configuré
Dans un cluster E-MapReduce (EMR) : JindoSDK est préinstallé. Pour accéder à OSS-HDFS, utilisez EMR V3.42.0 ou version ultérieure, ou EMR V5.8.0 ou version ultérieure.
Dans un environnement autre qu'EMR : installez d'abord JindoSDK. Consultez Déployer JindoSDK dans un environnement autre qu'EMR. Pour accéder à OSS-HDFS, JindoSDK V4.X ou version ultérieure est requis.
Les dépendances FUSE (Filesystem in Userspace) requises installées (voir Installer les dépendances)
Un bucket OSS ou un chemin OSS-HDFS à monter
Des identifiants Alibaba Cloud valides (AccessKey ID et AccessKey Secret) disposant des autorisations de lecture ou d'écriture sur le bucket cible
Installer les dépendances
Les clusters exécutant EMR V3.44.0 ou version ultérieure, EMR V5.10.0 ou version ultérieure, ou JindoSDK V4.6.2 ou version ultérieure disposent déjà des dépendances requises. Ignorez cette section si votre cluster remplit l'une de ces conditions.
Pour les clusters plus anciens, les dépendances requises varient selon la version de JindoSDK :
JindoSDK 4.5.0 ou version antérieure — installez fuse3 :
# CentOS
sudo yum install -y fuse3 fuse3-devel
# Debian
sudo apt install -y fuse3 libfuse3-dev
JindoSDK 4.5.1 ou version ultérieure — compilez et installez libfuse 3.7 ou version ultérieure. Les commandes suivantes compilent fuse-3,11 :
# Build dependencies (Debian: apt install -y pkg-config meson ninja-build)
sudo yum install -y meson ninja-build
# CentOS only: install a newer C++ compiler from devtoolset-8
sudo yum install -y scl-utils
sudo yum install -y alinux-release-experimentals
sudo yum install -y devtoolset-8-gcc devtoolset-8-gdb devtoolset-8-binutils devtoolset-8-make devtoolset-8-gcc-c++
sudo su -c "echo 'source /opt/rh/devtoolset-8/enable' > /etc/profile.d/g++.sh"
source /opt/rh/devtoolset-8/enable
sudo ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/local/bin/gcc
sudo ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/local/bin/g++
# Download and compile libfuse
wget https://github.com/libfuse/libfuse/releases/download/fuse-3.11.0/fuse-3.11.0.tar.xz
xz -d fuse-3.11.0.tar.xz
tar xf fuse-3.11.0.tar
cd fuse-3.11.0/
mkdir build; cd build
meson ..
sudo ninja install
Monter JindoFuse
-
Créez un point de montage local :
mkdir -p <mount_point>Remplacez
<mount_point>par un chemin local, par exemple/mnt/oss. -
Montez le chemin OSS ou OSS-HDFS :
jindo-fuse <mount_point> -ouri=<oss_path>Remplacez
<oss_path>par le chemin OSS ou OSS-HDFS à mapper. Le chemin peut être le répertoire racine ou un sous-répertoire d'un bucket, par exempleoss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/. Les commandes de montage pour OSS et OSS-HDFS sont identiques ; seul l'endpoint dans le chemin diffère. Cette commande démarre un processus démon en arrière-plan. -
Vérifiez que JindoFuse est en cours d'exécution :
ps -ef | grep jindo-fuseSi le
jindo-fuseest répertorié avec les paramètres de démarrage attendus, le montage est actif.
Accéder aux fichiers via le point de montage
Une fois JindoFuse monté sur /mnt/oss/, utilisez les commandes Linux standard pour gérer vos fichiers :
# List the top-level contents
ls /mnt/oss/
# Create a directory
mkdir /mnt/oss/dir1
# Write a file
echo "hello world" > /mnt/oss/dir1/hello.txt
# Read the file back
cat /mnt/oss/dir1/hello.txt
# Output: hello world
# Delete a directory and its contents
rm -rf /mnt/oss/dir1/
Démonter JindoFuse
Pour démonter un point de montage, exécutez la commande suivante :
umount <mount_point>
Vous pouvez également passer -oauto_unmount lors du montage. Avec cette option, l'envoi du signal SIGINT au jindo-fuse démonte automatiquement le point de montage avant la fin du processus :
killall -9 jindo-fuse
Opérations POSIX prises en charge
La plupart des opérations standard de système de fichiers fonctionnent à la fois sur OSS et OSS-HDFS. Le tableau ci-dessous répertorie toutes les opérations prises en charge et met en évidence les différences entre OSS et OSS-HDFS.
| Operation | Description | OSS | OSS-HDFS |
|---|---|---|---|
getattr() |
Obtenir les attributs du fichier | Pris en charge | Pris en charge |
mkdir() |
Créer un répertoire | Pris en charge | Pris en charge |
rmdir() |
Supprimer un répertoire | Pris en charge | Pris en charge |
unlink() |
Supprimer un fichier | Pris en charge | Pris en charge |
rename() |
Renommer un fichier | Pris en charge | Pris en charge |
read() |
Lecture séquentielle | Pris en charge | Pris en charge |
pread() |
Lecture aléatoire | Pris en charge | Pris en charge |
write() |
Écriture séquentielle | Pris en charge | Pris en charge |
pwrite() |
Écriture aléatoire | Non pris en charge | Pris en charge |
flush() |
Vider les données dans le cache du noyau | JindoFuse antérieur à 6.7.0 : mode ajout uniquement. JindoFuse 6.7.0 et versions ultérieures : pris en charge par défaut. Voir Fonctionnement de flush() dans OSS. | Pris en charge |
fsync() |
Vider les données sur le disque | Mode ajout uniquement | Pris en charge |
release() |
Libérer un fichier | Pris en charge | Pris en charge |
readdir() |
Lire un répertoire | Pris en charge | Pris en charge |
create() |
Créer un fichier | Pris en charge | Pris en charge |
open() O_APPEND |
Ouvrir en mode ajout | Pris en charge. Voir Limites d'AppendObject. | Pris en charge |
open() O_TRUNC |
Ouvrir en mode écrasement | Pris en charge | Pris en charge |
ftruncate() |
Tronquer un fichier ouvert | Non pris en charge | Pris en charge |
truncate() |
Tronquer un fichier fermé | Non pris en charge | Pris en charge |
lseek() |
Définir la position de lecture/écriture | Non pris en charge | Pris en charge |
chmod() |
Modifier les autorisations du fichier | Non pris en charge | Pris en charge |
access() |
Vérifier les autorisations du fichier | Pris en charge | Pris en charge |
utimes() |
Modifier les horodatages | Non pris en charge | Pris en charge |
setxattr() |
Définir les attributs étendus | Non pris en charge | Pris en charge |
getxattr() |
Obtenir les attributs étendus | Non pris en charge | Pris en charge |
listxattr() |
Répertorier les attributs étendus | Non pris en charge | Pris en charge |
removexattr() |
Supprimer les attributs étendus | Non pris en charge | Pris en charge |
lock() |
Verrouillage de fichier POSIX | Non pris en charge | Pris en charge |
fallocate() |
Pré-allouer de l'espace disque | Non pris en charge | Pris en charge |
symlink() |
Créer un lien symbolique | Non pris en charge | Pris en charge pour usage interne uniquement ; l'accélération par cache n'est pas prise en charge |
readlink() |
Lire un lien symbolique | Non pris en charge | Pris en charge |
Utilisation avancée
Paramètres de montage
Transmettez des paramètres au moment du montage pour contrôler le comportement de JindoFuse. Les paramètres spécifiés au moment du montage ont priorité sur les valeurs du fichier de configuration.
jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<endpoint>] -ofs.oss.accessKeyId=[<access_key_id>] -ofs.oss.accessKeySecret=[<access_key_secret>]
| Parameter | Required | Minimum version | Description | Example |
|---|---|---|---|---|
uri |
Oui | JindoData 4.3.0 | Chemin OSS à monter (racine ou sous-répertoire) | -ouri=oss://examplebucket/ |
f |
Non | JindoData 4.3.0 | Exécuter JindoFuse au premier plan au lieu de le faire fonctionner comme un démon. Activez les journaux du terminal lors de l'utilisation de cette option. | -f |
d |
Non | JindoData 4.3.0 | Activer le mode débogage (fonctionne également au premier plan). Activez les journaux du terminal lors de l'utilisation de cette option. | -d |
auto_unmount |
Non | JindoData 4.3.0 | Démonter automatiquement le point de montage lorsque le processus JindoFuse se termine | -oauto_unmount |
ro |
Non | JindoData 4.3.0 | Monter en mode lecture seule ; les opérations d'écriture sont rejetées | -oro |
direct_io |
Non | JindoData 4.3.0 | Contourner le cache de pages pour les lectures et les écritures | -odirect_io |
kernel_cache |
Non | JindoData 4.3.0 | Utiliser le cache du noyau pour améliorer les performances de lecture | -okernel_cache |
auto_cache |
Non | JindoData 4.3.0 | Similaire à kernel_cache, mais invalide le cache lorsque la taille du fichier ou l'heure de modification change. Activé par défaut. |
— |
entry_timeout |
Non | JindoData 4.3.0 | Durée de mise en cache des noms d'entrées de répertoire, en secondes. Par défaut : 60. Définissez sur 0 pour désactiver la mise en cache. |
-oentry_timeout=60 |
attr_timeout |
Non | JindoData 4.3.0 | Durée de mise en cache des attributs de fichier, en secondes. Par défaut : 60. Définissez sur 0 pour désactiver la mise en cache. |
-oattr_timeout=60 |
negative_timeout |
Non | JindoData 4.3.0 | Durée de mise en cache des recherches ayant échoué, en secondes. Par défaut : 60. Définissez sur 0 pour désactiver la mise en cache. |
-onegative_timeout=0 |
max_idle_threads |
Non | JindoData 4.3.0 | Nombre de threads inactifs disponibles pour les rappels du noyau. Par défaut : 10. |
-omax_idle_threads=10 |
xengine |
Non | JindoData 4.3.0 | Activer la fonctionnalité d'accélération par cache local | -oxengine |
pread |
Non | JindoData 4.5.1 | Utiliser des lectures aléatoires au lieu de lectures séquentielles. Utilisez cette option pour les charges de travail comportant beaucoup plus de lectures aléatoires que de lectures séquentielles. | -opread |
no_symlink |
Non | JindoData 4.5.1 | Désactiver la prise en charge des liens symboliques | -ono_symlink |
no_writeback |
Non | JindoData 4.5.1 | Désactiver la mise en cache en écriture différée | -ono_writeback |
no_flock |
Non | JindoData 4.5.1 | Désactiver le verrouillage de fichier flock | -ono_flock |
no_xattr |
Non | JindoData 4.5.1 | Désactiver la prise en charge des attributs étendus (xattr) | -ono_xattr |
Paramètres de configuration
Définissez ces paramètres dans le fichier de configuration JindoSDK. Les paramètres de montage ont priorité sur eux.
| Parameter | Default | Description |
|---|---|---|
logger.dir |
/tmp/bigboot-log |
Répertoire des journaux. Créé automatiquement s'il n'existe pas. |
logger.sync |
false |
false = écrire les journaux de manière asynchrone |
logger.consolelogger |
false |
Imprimer les journaux dans le terminal |
logger.level |
2 |
Niveau de journalisation minimal à écrire. 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF |
logger.verbose |
0 |
Niveau de journalisation détaillée minimal à écrire (0–99). 0 désactive les journaux détaillés. |
logger.cleaner.enable |
false |
Activer le nettoyage automatique des journaux |
fs.oss.endpoint |
— | Endpoint pour accéder à JindoFS, par exemple oss-cn-xxx.aliyuncs.com |
fs.oss.accessKeyId |
— | AccessKey ID pour JindoFS |
fs.oss.accessKeySecret |
— | AccessKey Secret pour JindoFS |
FAQ
Comment identifier la cause d'une erreur ?
JindoFuse ne peut afficher que les codes d'erreur prédéfinis par le système d'exploitation, qui ne sont souvent pas assez spécifiques pour diagnostiquer la cause racine. Pour obtenir des messages d'erreur détaillés de JindoSDK, consultez le jindosdk.log dans le répertoire spécifié par le logger.dir (par défaut : /tmp/bigboot-log).
Fonctionnement de flush() dans OSS
Le comportement de flush() sur OSS dépend de la version de JindoFuse :
JindoFuse antérieur à 6.7.0 :
Mode ajout : La fermeture d'un fichier (
close()) déclencheflush(), qui vide les données mises en tampon dans le cache du noyau, puis les écrit dans OSS viaAppendObject. Consultez Limites d'AppendObject pour connaître les restrictions.Autres modes :
flush()n'a aucun effet. Les données ne sont pas écrites dans OSS lors de la fermeture du fichier.
JindoFuse 6.7.0 et versions ultérieures :
Le fs.oss.fuse.flush.enable est défini par défaut sur true. Avec ce paramètre :
flush()écrit les données dans OSS quel que soit le mode d'ouverture du fichier (open(),O_APPENDou autres modes), sans affecter OSS-HDFS.Les données sont écrites à l'aide de
PutObjectou du téléchargement multipart (MPU), et non deAppendObject.L'appel de
flush()sur un objet existant, ou l'appel deflush()deux fois sur un nouvel objet, augmente les coûts d'E/S car JindoFuse doit relire et retélécharger les données.
Définissez fs.oss.fuse.flush.enable=false pour revenir au comportement limité au mode ajout.