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.
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
-
Crie um ponto de montagem local:
mkdir -p <mount_point>Substitua
<mount_point>por um caminho local, como/mnt/oss. -
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 exemplooss://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. -
Verifique se o JindoFuse está em execução:
ps -ef | grep jindo-fuseSe o processo
jindo-fuseaparecer 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 |
|
|
Obter atributos de arquivo |
Suportado |
Suportado |
|
|
Criar um diretório |
Suportado |
Suportado |
|
|
Excluir um diretório |
Suportado |
Suportado |
|
|
Excluir um arquivo |
Suportado |
Suportado |
|
|
Renomear um arquivo |
Suportado |
Suportado |
|
|
Leitura sequencial |
Suportado |
Suportado |
|
|
Leitura aleatória |
Suportado |
Suportado |
|
|
Gravação sequencial |
Suportado |
Suportado |
|
|
Gravação aleatória |
Não suportado |
Suportado |
|
|
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 |
|
|
Liberar dados para o disco |
Apenas modo de anexação |
Suportado |
|
|
Liberar um arquivo |
Suportado |
Suportado |
|
|
Ler um diretório |
Suportado |
Suportado |
|
|
Criar um arquivo |
Suportado |
Suportado |
|
|
Abrir em modo de anexação |
Suportado. Consulte Limites do AppendObject. |
Suportado |
|
|
Abrir em modo de sobrescrita |
Suportado |
Suportado |
|
|
Truncar um arquivo aberto |
Não suportado |
Suportado |
|
|
Truncar um arquivo fechado |
Não suportado |
Suportado |
|
|
Definir posição de leitura/gravação |
Não suportado |
Suportado |
|
|
Alterar permissões de arquivo |
Não suportado |
Suportado |
|
|
Verificar permissões de arquivo |
Suportado |
Suportado |
|
|
Alterar carimbos de data/hora |
Não suportado |
Suportado |
|
|
Definir atributos estendidos |
Não suportado |
Suportado |
|
|
Obter atributos estendidos |
Não suportado |
Suportado |
|
|
Listar atributos estendidos |
Não suportado |
Suportado |
|
|
Remover atributos estendidos |
Não suportado |
Suportado |
|
|
Bloqueio de arquivo POSIX |
Não suportado |
Suportado |
|
|
Pré-alocar espaço em disco |
Não suportado |
Suportado |
|
|
Criar um link simbólico |
Não suportado |
Suportado apenas para uso interno; aceleração de cache não suportada |
|
|
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 |
|
|
Sim |
JindoData 4.3.0 |
Caminho do OSS para montar (raiz ou subdiretório) |
|
|
|
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. |
|
|
|
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. |
|
|
|
Não |
JindoData 4.3.0 |
Desmonta automaticamente o ponto de montagem quando o processo do JindoFuse é encerrado |
|
|
|
Não |
JindoData 4.3.0 |
Monta em modo somente leitura; operações de gravação são rejeitadas |
|
|
|
Não |
JindoData 4.3.0 |
Ignora o cache de páginas para leituras e gravações |
|
|
|
Não |
JindoData 4.3.0 |
Utiliza o cache do kernel para melhorar o desempenho de leitura |
|
|
|
Não |
JindoData 4.3.0 |
Semelhante ao |
— |
|
|
Não |
JindoData 4.3.0 |
Tempo de cache dos nomes de entradas de diretório, em segundos. Padrão: |
|
|
|
Não |
JindoData 4.3.0 |
Tempo de cache dos atributos de arquivo, em segundos. Padrão: |
|
|
|
Não |
JindoData 4.3.0 |
Tempo de cache para consultas falhas, em segundos. Padrão: |
|
|
|
Não |
JindoData 4.3.0 |
Número de threads ociosas disponíveis para callbacks do kernel. Padrão: |
|
|
|
Não |
JindoData 4.3.0 |
Ativa o recurso de aceleração de cache local |
|
|
|
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. |
|
|
|
Não |
JindoData 4.5.1 |
Desativa o suporte a links simbólicos |
|
|
|
Não |
JindoData 4.5.1 |
Desativa o cache de write-back |
|
|
|
Não |
JindoData 4.5.1 |
Desativa o bloqueio de arquivos flock |
|
|
|
Não |
JindoData 4.5.1 |
Desativa o suporte a atributos estendidos (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 |
|
|
|
Diretório de log. Criado automaticamente caso não exista. |
|
|
|
|
|
|
|
Imprime logs no terminal |
|
|
|
Nível mínimo de log para gravação. |
|
|
|
Nível mínimo de log detalhado para gravação (0–99). |
|
|
|
Ativa a limpeza automática de logs |
|
|
— |
Endpoint para acessar o JindoFS, por exemplo |
|
|
— |
AccessKey ID para o JindoFS |
|
|
— |
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()) acionaflush(), que libera os dados armazenados em buffer para o cache do kernel e, em seguida, os grava no OSS viaAppendObject. 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_APPENDou outros modos), sem afetar o OSS-HDFS.Os dados são gravados usando
PutObjectou upload multipartido (MPU), e nãoAppendObject.Chamar
flush()em um objeto existente, ou chamarflush()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.