JindoFuse menyediakan dukungan Portable Operating System Interface (POSIX) untuk Object Storage Service (OSS) dan OSS-HDFS. Fitur ini memungkinkan Anda memasang bucket OSS atau path OSS-HDFS sebagai direktori lokal, sehingga alat standar Linux—seperti ls, mkdir, cat, cp, dan lainnya—dapat langsung berinteraksi dengan OSS atau OSS-HDFS.
JindoFuse tidak mengimplementasikan spesifikasi POSIX secara lengkap. Fitur ini dioptimalkan untuk beban kerja yang mengakses OSS atau OSS-HDFS melalui antarmuka sistem file. Sebelum memulai, periksa bagian Operasi POSIX yang didukung untuk memastikan operasi yang dibutuhkan oleh beban kerja Anda telah didukung.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
JindoSDK yang telah diinstal dan dikonfigurasi
Pada kluster E-MapReduce (EMR): JindoSDK telah dipra-instal. Untuk mengakses OSS-HDFS, gunakan EMR V3.42.0 atau versi lebih baru, atau EMR V5.8.0 atau versi lebih baru.
Pada lingkungan non-EMR: instal JindoSDK terlebih dahulu. Lihat Deploy JindoSDK in an environment other than EMR. Untuk mengakses OSS-HDFS, diperlukan JindoSDK V4.X atau versi lebih baru.
Dependencies FUSE (Filesystem in Userspace) yang diperlukan telah diinstal (lihat Instal dependencies)
Bucket OSS atau path OSS-HDFS yang akan dipasang
Kredensial Alibaba Cloud yang valid (ID AccessKey dan AccessKey Secret) dengan izin baca atau tulis pada bucket target
Instal dependencies
Kluster yang menjalankan EMR V3.44.0 atau versi lebih baru, EMR V5.10.0 atau versi lebih baru, atau JindoSDK V4.6.2 atau versi lebih baru telah memiliki dependencies yang diperlukan. Lewati bagian ini jika kluster Anda memenuhi salah satu kondisi tersebut.
Untuk kluster versi lama, dependencies yang diperlukan berbeda tergantung versi JindoSDK:
JindoSDK 4.5.0 atau versi sebelumnya — instal fuse3:
# CentOS
sudo yum install -y fuse3 fuse3-devel
# Debian
sudo apt install -y fuse3 libfuse3-devJindoSDK 4.5.1 atau versi lebih baru — build dan instal libfuse 3.7 atau versi lebih baru. Perintah berikut melakukan kompilasi 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 installMount JindoFuse
Buat mount point lokal:
mkdir -p <mount_point>Ganti
<mount_point>dengan path lokal, misalnya/mnt/oss.Mount path OSS atau OSS-HDFS:
jindo-fuse <mount_point> -ouri=<oss_path>Ganti
<oss_path>dengan path OSS atau OSS-HDFS yang akan dipetakan. Path tersebut dapat berupa direktori root atau subdirektori dari sebuah bucket, misalnyaoss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/. Perintah mount untuk OSS dan OSS-HDFS identik—hanya endpoint dalam path yang berbeda. Perintah ini menjalankan proses daemon di latar belakang.Verifikasi bahwa JindoFuse sedang berjalan:
ps -ef | grep jindo-fuseJika proses
jindo-fuseterdaftar dengan parameter startup yang sesuai, maka mount tersebut aktif.
Akses file melalui mount point
Dengan JindoFuse yang telah dimount di /mnt/oss/, gunakan perintah Linux standar untuk bekerja dengan file Anda:
# 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/Unmount JindoFuse
Untuk melepas mount point, jalankan:
umount <mount_point>Atau, tambahkan opsi -oauto_unmount saat melakukan mount. Dengan opsi ini, mengirim sinyal SIGINT ke proses jindo-fuse akan secara otomatis melepas mount point sebelum proses berhenti:
killall -9 jindo-fuseOperasi POSIX yang didukung
Sebagian besar operasi sistem file standar berfungsi baik pada OSS maupun OSS-HDFS. Tabel berikut mencantumkan semua operasi yang didukung dan menyoroti perbedaan antara OSS dan OSS-HDFS.
| Operasi | Deskripsi | OSS | OSS-HDFS |
|---|---|---|---|
getattr() | Mendapatkan atribut file | Didukung | Didukung |
mkdir() | Membuat direktori | Didukung | Didukung |
rmdir() | Menghapus direktori | Didukung | Didukung |
unlink() | Menghapus file | Didukung | Didukung |
rename() | Mengganti nama file | Didukung | Didukung |
read() | Baca sekuensial | Didukung | Didukung |
pread() | Baca acak | Didukung | Didukung |
write() | Tulis sekuensial | Didukung | Didukung |
pwrite() | Tulis acak | Tidak didukung | Didukung |
flush() | Flush data ke cache kernel | JindoFuse versi sebelum 6.7.0: hanya mode append. JindoFuse 6.7.0 dan versi lebih baru: didukung secara default. Lihat Cara kerja flush() di OSS. | Didukung |
fsync() | Tuliskan data ke disk | Hanya mode append | Didukung |
release() | Melepas file | Didukung | Didukung |
readdir() | Membaca direktori | Didukung | Didukung |
create() | Membuat file | Didukung | Didukung |
open() O_APPEND | Buka dalam mode append | Didukung. Lihat Batasan AppendObject. | Didukung |
open() O_TRUNC | Buka dalam mode overwrite | Didukung | Didukung |
ftruncate() | Memotong file yang sedang terbuka | Tidak didukung | Didukung |
truncate() | Memotong file yang tertutup | Tidak didukung | Didukung |
lseek() | Menetapkan posisi baca/tulis | Tidak didukung | Didukung |
chmod() | Mengubah izin file | Tidak didukung | Didukung |
access() | Memeriksa izin file | Didukung | Didukung |
utimes() | Mengubah timestamp | Tidak didukung | Didukung |
setxattr() | Menetapkan atribut ekstensi | Tidak didukung | Didukung |
getxattr() | Mendapatkan atribut ekstensi | Tidak didukung | Didukung |
listxattr() | Menampilkan daftar atribut ekstensi | Tidak didukung | Didukung |
removexattr() | Menghapus atribut ekstensi | Tidak didukung | Didukung |
lock() | Kunci file POSIX | Tidak didukung | Didukung |
fallocate() | Mengalokasikan ruang disk sebelumnya | Tidak didukung | Didukung |
symlink() | Membuat tautan simbolik | Tidak didukung | Didukung hanya untuk penggunaan internal; akselerasi cache tidak didukung |
readlink() | Membaca tautan simbolik | Tidak didukung | Didukung |
Penggunaan lanjutan
Parameter mount
Gunakan parameter saat mount untuk mengontrol perilaku JindoFuse. Parameter yang ditentukan saat mount memiliki prioritas lebih tinggi daripada nilai dalam file konfigurasi.
jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<endpoint>] -ofs.oss.accessKeyId=[<access_key_id>] -ofs.oss.accessKeySecret=[<access_key_secret>]| Parameter | Wajib | Versi minimum | Deskripsi | Contoh |
|---|---|---|---|---|
uri | Ya | JindoData 4.3.0 | Path OSS yang akan dimount (root atau subdirektori) | -ouri=oss://examplebucket/ |
f | Tidak | JindoData 4.3.0 | Jalankan JindoFuse di foreground, bukan sebagai daemon. Aktifkan log terminal saat menggunakan opsi ini. | -f |
d | Tidak | JindoData 4.3.0 | Aktifkan mode debug (juga berjalan di foreground). Aktifkan log terminal saat menggunakan opsi ini. | -d |
auto_unmount | Tidak | JindoData 4.3.0 | Secara otomatis melepas mount point ketika proses JindoFuse berhenti | -oauto_unmount |
ro | Tidak | JindoData 4.3.0 | Mount dalam mode read-only; operasi tulis akan ditolak | -oro |
direct_io | Tidak | JindoData 4.3.0 | Lewati page cache untuk operasi baca dan tulis | -odirect_io |
kernel_cache | Tidak | JindoData 4.3.0 | Gunakan cache kernel untuk meningkatkan performa baca | -okernel_cache |
auto_cache | Tidak | JindoData 4.3.0 | Mirip dengan kernel_cache, tetapi membatalkan cache ketika ukuran file atau waktu modifikasi berubah. Diaktifkan secara default. | — |
entry_timeout | Tidak | JindoData 4.3.0 | Durasi caching nama entri direktori, dalam detik. Default: 60. Atur ke 0 untuk menonaktifkan caching. | -oentry_timeout=60 |
attr_timeout | Tidak | JindoData 4.3.0 | Durasi caching atribut file, dalam detik. Default: 60. Atur ke 0 untuk menonaktifkan caching. | -oattr_timeout=60 |
negative_timeout | Tidak | JindoData 4.3.0 | Durasi caching pencarian yang gagal, dalam detik. Default: 60. Atur ke 0 untuk menonaktifkan caching. | -onegative_timeout=0 |
max_idle_threads | Tidak | JindoData 4.3.0 | Jumlah thread idle yang tersedia untuk callback kernel. Default: 10. | -omax_idle_threads=10 |
xengine | Tidak | JindoData 4.3.0 | Aktifkan fitur akselerasi cache lokal | -oxengine |
pread | Tidak | JindoData 4.5.1 | Gunakan baca acak alih-alih baca sekuensial. Gunakan ini untuk workload dengan jumlah baca acak jauh lebih banyak daripada baca sekuensial. | -opread |
no_symlink | Tidak | JindoData 4.5.1 | Nonaktifkan dukungan tautan simbolik | -ono_symlink |
no_writeback | Tidak | JindoData 4.5.1 | Nonaktifkan write-back caching | -ono_writeback |
no_flock | Tidak | JindoData 4.5.1 | Nonaktifkan penguncian file flock | -ono_flock |
no_xattr | Tidak | JindoData 4.5.1 | Nonaktifkan dukungan atribut ekstensi (xattr) | -ono_xattr |
Parameter konfigurasi
Tetapkan parameter berikut dalam file konfigurasi JindoSDK. Parameter yang ditentukan saat mount akan menggantikan nilai-nilai ini.
| Parameter | Default | Deskripsi |
|---|---|---|
logger.dir | /tmp/bigboot-log | Direktori log. Dibuat secara otomatis jika belum ada. |
logger.sync | false | false = menulis log secara asinkron |
logger.consolelogger | false | Menampilkan log ke terminal |
logger.level | 2 | Tingkat log minimum yang ditulis. 0=TRACE, 1=DEBUG, 2=INFO, 3=WARN, 4=ERROR, 5=CRITICAL, 6=OFF |
logger.verbose | 0 | Tingkat log verbose minimum yang ditulis (0–99). 0 menonaktifkan log verbose. |
logger.cleaner.enable | false | Aktifkan pembersihan log otomatis |
fs.oss.endpoint | — | Titik akhir untuk mengakses JindoFS, misalnya oss-cn-xxx.aliyuncs.com |
fs.oss.accessKeyId | — | ID AccessKey untuk JindoFS |
fs.oss.accessKeySecret | — | AccessKey Secret untuk JindoFS |
FAQ
Bagaimana cara mengidentifikasi penyebab error?
JindoFuse hanya dapat menampilkan kode kesalahan yang telah ditentukan oleh sistem operasi, yang sering kali tidak cukup spesifik untuk mendiagnosis akar permasalahan. Untuk pesan kesalahan detail dari JindoSDK, periksa file jindosdk.log di direktori yang ditentukan oleh parameter konfigurasi logger.dir (default: /tmp/bigboot-log).
Cara kerja flush() di OSS
Perilaku flush() pada OSS bergantung pada versi JindoFuse:
JindoFuse versi sebelum 6.7.0:
Mode append: Menutup file (
close()) memicuflush(), yang mengalirkan data yang dibuffer ke cache kernel lalu menuliskannya ke OSS melaluiAppendObject. Lihat Batasan AppendObject untuk informasi pembatasan.Mode lainnya:
flush()tidak berpengaruh. Data tidak ditulis ke OSS saat file ditutup.
JindoFuse 6.7.0 dan versi lebih baru:
Parameter fs.oss.fuse.flush.enable secara default bernilai true. Dengan pengaturan ini:
flush()menulis data ke OSS terlepas dari cara file dibuka (open(),O_APPEND, atau mode lainnya), tanpa memengaruhi OSS-HDFS.Data ditulis menggunakan
PutObjectatau unggah multi-bagian (MPU), bukanAppendObject.Memanggil
flush()pada objek yang sudah ada, atau memanggilflush()dua kali pada objek baru, meningkatkan biaya I/O karena JindoFuse harus membaca ulang dan mengunggah ulang data tersebut.
Atur fs.oss.fuse.flush.enable=false untuk kembali ke perilaku hanya mode append.