Todos os produtos
Search
Central de documentação

E-MapReduce:JindoFuse User Guide

Última atualização: Jun 27, 2026

O JindoFuse oferece suporte à Interface de Sistema Operacional Portátil (POSIX) para o Object Storage Service (OSS) e OSS-HDFS. Esse recurso permite montar um bucket do OSS ou um caminho do OSS-HDFS como um diretório local, possibilitando que ferramentas padrão do Linux — ls, mkdir, cat, cp, entre outras — operem diretamente no OSS ou OSS-HDFS.

Nota

O JindoFuse não implementa a especificação POSIX completa. Ele é otimizado para cargas de trabalho que acessam o OSS ou OSS-HDFS por meio de uma interface de sistema de arquivos. Antes de começar, consulte a seção Operações POSIX suportadas para confirmar se as operações necessárias à sua carga de trabalho são compatíveis.

Pré-requisitos

Antes de iniciar, certifique-se de ter:

  • O JindoSDK instalado e configurado

    • Em um cluster E-MapReduce (EMR): o JindoSDK vem pré-instalado. Para acessar o OSS-HDFS, utilize o EMR V3.42.0 ou superior, ou o EMR V5.8.0 ou superior.

    • Em ambientes fora do EMR: instale o JindoSDK primeiro. Consulte Implantar o JindoSDK em um ambiente diferente do EMR. Para acessar o OSS-HDFS, é necessário o JindoSDK V4.X ou superior.

  • As dependências necessárias do FUSE (Filesystem in Userspace) instaladas (consulte Instalar dependências)

  • Um bucket do OSS ou caminho do OSS-HDFS para montar

  • Credenciais válidas da Alibaba Cloud (AccessKey ID e AccessKey Secret) com permissões de leitura ou gravação no bucket de destino

Instalar dependências

Clusters que executam EMR V3.44.0 ou superior, EMR V5.10.0 ou superior, ou JindoSDK V4.6.2 ou superior já possuem as dependências necessárias. Ignore esta seção caso seu cluster atenda a qualquer uma dessas condições.

Para clusters mais antigos, as dependências variam conforme a versão do JindoSDK:

JindoSDK 4.5.0 ou anterior — instale o fuse3:

# CentOS
sudo yum install -y fuse3 fuse3-devel

# Debian
sudo apt install -y fuse3 libfuse3-dev

JindoSDK 4.5.1 ou superior — compile e instale o libfuse 3,7 ou posterior. Os comandos abaixo compilam o 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

Montar o JindoFuse

  1. Crie um ponto de montagem local:

    mkdir -p <mount_point>

    Substitua <mount_point> por um caminho local, como /mnt/oss.

  2. Monte o caminho do OSS ou OSS-HDFS:

    jindo-fuse <mount_point> -ouri=<oss_path>

    Substitua <oss_path> pelo caminho do OSS ou OSS-HDFS que deseja mapear. O caminho pode ser o diretório raiz ou um subdiretório de um bucket, por exemplo oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/. Os comandos de montagem para OSS e OSS-HDFS são idênticos — apenas o endpoint no caminho difere. Este comando inicia um processo daemon em segundo plano.

  3. Verifique se o JindoFuse está em execução:

    ps -ef | grep jindo-fuse

    Se o processo jindo-fuse aparecer listado com os parâmetros de inicialização esperados, a montagem está ativa.

Acessar arquivos pelo ponto de montagem

Com o JindoFuse montado em /mnt/oss/, use comandos padrão do Linux para gerenciar seus arquivos:

# 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/

Desmontar o JindoFuse

Para desmontar um ponto de montagem, execute:

umount <mount_point>

Alternativamente, passe -oauto_unmount durante a montagem. Com essa opção, enviar SIGINT ao processo jindo-fuse desmonta automaticamente o ponto de montagem antes que o processo seja encerrado:

killall -9 jindo-fuse

Operações POSIX suportadas

A maioria das operações padrão de sistema de arquivos funciona tanto no OSS quanto no OSS-HDFS. A tabela abaixo lista todas as operações suportadas e destaca onde o OSS difere do OSS-HDFS.

Operação

Descrição

OSS

OSS-HDFS

getattr()

Obter atributos de arquivo

Suportado

Suportado

mkdir()

Criar um diretório

Suportado

Suportado

rmdir()

Excluir um diretório

Suportado

Suportado

unlink()

Excluir um arquivo

Suportado

Suportado

rename()

Renomear um arquivo

Suportado

Suportado

read()

Leitura sequencial

Suportado

Suportado

pread()

Leitura aleatória

Suportado

Suportado

write()

Gravação sequencial

Suportado

Suportado

pwrite()

Gravação aleatória

Não suportado

Suportado

flush()

Liberar dados para o cache do kernel

JindoFuse anterior à versão 6.7.0: apenas modo de anexação. JindoFuse 6.7.0 e posterior: suportado por padrão. Consulte Como flush() funciona no OSS.

Suportado

fsync()

Liberar dados para o disco

Apenas modo de anexação

Suportado

release()

Liberar um arquivo

Suportado

Suportado

readdir()

Ler um diretório

Suportado

Suportado

create()

Criar um arquivo

Suportado

Suportado

open() O_APPEND

Abrir em modo de anexação

Suportado. Consulte Limites do AppendObject.

Suportado

open() O_TRUNC

Abrir em modo de sobrescrita

Suportado

Suportado

ftruncate()

Truncar um arquivo aberto

Não suportado

Suportado

truncate()

Truncar um arquivo fechado

Não suportado

Suportado

lseek()

Definir posição de leitura/gravação

Não suportado

Suportado

chmod()

Alterar permissões de arquivo

Não suportado

Suportado

access()

Verificar permissões de arquivo

Suportado

Suportado

utimes()

Alterar carimbos de data/hora

Não suportado

Suportado

setxattr()

Definir atributos estendidos

Não suportado

Suportado

getxattr()

Obter atributos estendidos

Não suportado

Suportado

listxattr()

Listar atributos estendidos

Não suportado

Suportado

removexattr()

Remover atributos estendidos

Não suportado

Suportado

lock()

Bloqueio de arquivo POSIX

Não suportado

Suportado

fallocate()

Pré-alocar espaço em disco

Não suportado

Suportado

symlink()

Criar um link simbólico

Não suportado

Suportado apenas para uso interno; aceleração de cache não suportada

readlink()

Ler um link simbólico

Não suportado

Suportado

Uso avançado

Parâmetros de montagem

Passe parâmetros no momento da montagem para controlar o comportamento do JindoFuse. Os parâmetros especificados na montagem têm precedência sobre os valores definidos no arquivo de configuração.

jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<endpoint>] -ofs.oss.accessKeyId=[<access_key_id>] -ofs.oss.accessKeySecret=[<access_key_secret>]

Parâmetro

Obrigatório

Versão mínima

Descrição

Exemplo

uri

Sim

JindoData 4.3.0

Caminho do OSS para montar (raiz ou subdiretório)

-ouri=oss://examplebucket/

f

Não

JindoData 4.3.0

Executa o JindoFuse em primeiro plano, em vez de como daemon. Ative os logs de terminal ao usar esta opção.

-f

d

Não

JindoData 4.3.0

Ativa o modo de depuração (também executa em primeiro plano). Ative os logs de terminal ao usar esta opção.

-d

auto_unmount

Não

JindoData 4.3.0

Desmonta automaticamente o ponto de montagem quando o processo do JindoFuse é encerrado

-oauto_unmount

ro

Não

JindoData 4.3.0

Monta em modo somente leitura; operações de gravação são rejeitadas

-oro

direct_io

Não

JindoData 4.3.0

Ignora o cache de páginas para leituras e gravações

-odirect_io

kernel_cache

Não

JindoData 4.3.0

Utiliza o cache do kernel para melhorar o desempenho de leitura

-okernel_cache

auto_cache

Não

JindoData 4.3.0

Semelhante ao kernel_cache, mas invalida o cache quando o tamanho do arquivo ou a data de modificação muda. Ativado por padrão.

entry_timeout

Não

JindoData 4.3.0

Tempo de cache dos nomes de entradas de diretório, em segundos. Padrão: 60. Defina como 0 para desativar o cache.

-oentry_timeout=60

attr_timeout

Não

JindoData 4.3.0

Tempo de cache dos atributos de arquivo, em segundos. Padrão: 60. Defina como 0 para desativar o cache.

-oattr_timeout=60

negative_timeout

Não

JindoData 4.3.0

Tempo de cache para consultas falhas, em segundos. Padrão: 60. Defina como 0 para desativar o cache.

-onegative_timeout=0

max_idle_threads

Não

JindoData 4.3.0

Número de threads ociosas disponíveis para callbacks do kernel. Padrão: 10.

-omax_idle_threads=10

xengine

Não

JindoData 4.3.0

Ativa o recurso de aceleração de cache local

-oxengine

pread

Não

JindoData 4.5.1

Usa leituras aleatórias em vez de leituras sequenciais. Recomendado para cargas de trabalho com muito mais leituras aleatórias do que sequenciais.

-opread

no_symlink

Não

JindoData 4.5.1

Desativa o suporte a links simbólicos

-ono_symlink

no_writeback

Não

JindoData 4.5.1

Desativa o cache de write-back

-ono_writeback

no_flock

Não

JindoData 4.5.1

Desativa o bloqueio de arquivos flock

-ono_flock

no_xattr

Não

JindoData 4.5.1

Desativa o suporte a atributos estendidos (xattr)

-ono_xattr

Parâmetros de configuração

Defina estes parâmetros no arquivo de configuração do JindoSDK. Os parâmetros definidos no momento da montagem substituem estas configurações.

Parâmetro

Padrão

Descrição

logger.dir

/tmp/bigboot-log

Diretório de log. Criado automaticamente caso não exista.

logger.sync

false

false = grava logs de forma assíncrona

logger.consolelogger

false

Imprime logs no terminal

logger.level

2

Nível mínimo de log para gravação. 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF

logger.verbose

0

Nível mínimo de log detalhado para gravação (0–99). 0 desativa logs detalhados.

logger.cleaner.enable

false

Ativa a limpeza automática de logs

fs.oss.endpoint

Endpoint para acessar o JindoFS, por exemplo oss-cn-xxx.aliyuncs.com

fs.oss.accessKeyId

AccessKey ID para o JindoFS

fs.oss.accessKeySecret

AccessKey Secret para o JindoFS

Perguntas frequentes

Como identificar a causa de um erro?

O JindoFuse exibe apenas os códigos de erro predefinidos pelo sistema operacional, que muitas vezes não são específicos o suficiente para diagnosticar a causa raiz. Para mensagens de erro detalhadas do JindoSDK, verifique o arquivo jindosdk.log no diretório especificado pelo parâmetro de configuração logger.dir (padrão: /tmp/bigboot-log).

Como flush() funciona no OSS

O comportamento de flush() no OSS depende da versão do JindoFuse:

JindoFuse anterior à versão 6.7.0:

  • Modo de anexação: Fechar um arquivo (close()) aciona flush(), que libera os dados armazenados em buffer para o cache do kernel e, em seguida, os grava no OSS via AppendObject. Consulte Limites do AppendObject para restrições.

  • Outros modos: flush() não tem efeito. Os dados não são gravados no OSS quando o arquivo é fechado.

JindoFuse 6.7.0 e posterior:

O parâmetro fs.oss.fuse.flush.enable tem como padrão true. Com essa configuração:

  • flush() grava dados no OSS independentemente de como o arquivo foi aberto (open(), O_APPEND ou outros modos), sem afetar o OSS-HDFS.

  • Os dados são gravados usando PutObject ou upload multipartido (MPU), e não AppendObject.

  • Chamar flush() em um objeto existente, ou chamar flush() duas vezes em um novo objeto, aumenta os custos de I/O porque o JindoFuse precisa reler e reenviar os dados.

Defina fs.oss.fuse.flush.enable=false para reverter ao comportamento exclusivo do modo de anexação.