Jika Anda ingin memetakan OSS-HDFS ke sistem file lokal lalu mengakses objek di OSS-HDFS melalui API HDFS standar serta melakukan operasi seperti membaca, menulis, dan menghapus objek, Anda dapat menggunakan JindoFuse. JindoFuse adalah alat yang memungkinkan akses ke sistem file terdistribusi open source yang kompatibel dengan POSIX, sehingga aplikasi AI dapat langsung menggunakan OSS-HDFS untuk penyimpanan dan pemrosesan data.
Prasyarat
OSS-HDFS telah diaktifkan untuk bucket dan izin akses telah diberikan. Untuk informasi selengkapnya, lihat Aktifkan OSS-HDFS.
Persiapan
Anda dapat menggunakan salah satu metode berikut untuk mengakses OSS-HDFS:
Jika Anda ingin mengakses OSS-HDFS menggunakan kluster Alibaba Cloud EMR, pastikan kluster EMR versi 3.44.0 atau lebih baru, atau versi 5.10.0 atau lebih baru telah dibuat. Kluster EMR yang memenuhi persyaratan tersebut telah terintegrasi dengan JindoFuse secara default. Untuk informasi selengkapnya, lihat Buat kluster.
Jika Anda tidak menggunakan kluster Alibaba Cloud EMR untuk mengakses OSS-HDFS, pastikan JindoSDK versi 4.6.2 atau lebih baru telah diinstal dan dideploy. Untuk informasi selengkapnya, lihat Deploy JindoSDK di kluster non-EMR.
Prosedur
Konfigurasikan variabel lingkungan.
Jika Anda ingin mengakses OSS-HDFS menggunakan kluster Alibaba Cloud EMR, lewati langkah ini dan lanjutkan ke Langkah 2.
Jika Anda tidak ingin mengakses OSS-HDFS melalui kluster Alibaba Cloud EMR, ikuti langkah-langkah berikut untuk mengonfigurasi JindoFuse:
-
Hubungkan ke Instance ECS. Untuk informasi selengkapnya, lihat Hubungkan ke Instance ECS.
Modifikasi variabel lingkungan.
Dalam contoh ini, jindosdk-x.x.x diinstal di direktori root/. x.x.x menunjukkan nomor versi JindoSDK. Sesuaikan variabel lingkungan dengan path aktual tempat JindoSDK diinstal.
export JINDOSDK_HOME=/root/jindosdk-x.x.x
export HADOOP_CLASSPATH=`hadoop classpath`:${JINDOSDK_HOME}/lib/*
export JINDOSDK_CONF_DIR=/root/jindosdk-x.x.x/conf
export PATH=$PATH:$JINDOSDK_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${JINDOSDK_HOME}/lib/native
Konfigurasikan file konfigurasi.
Buat file konfigurasi bernama jindosdk.cfg di direktori conf/ JindoSDK.
Tambahkan item konfigurasi berikut ke file jindosdk.cfg:
[common]
logger.dir = /tmp/fuse-log
[jindosdk]
# Contoh berikut menggunakan wilayah China (Hangzhou). Ganti dengan wilayah Anda yang sebenarnya.
fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com
# Konfigurasikan ID AccessKey dan Rahasia AccessKey untuk mengakses OSS-HDFS.
fs.oss.accessKeyId = LTAI****************
fs.oss.accessKeySecret = yourAccessKeySecret
Mount OSS-HDFS.
Jalankan perintah berikut untuk membuat titik mount:
Jalankan perintah berikut untuk mount OSS-HDFS:
jindo-fuse <mount_point> -ouri=[<oss_path>]
Anda harus mengatur -ouri ke jalur DLS yang ingin Anda petakan. Jalur tersebut dapat berupa Direktori root atau subdirektori dari bucket. Setelah menjalankan perintah, proses daemon di latar belakang akan mulai memasang <oss_path> yang Anda tentukan ke titik pemasangan pada sistem file lokal. Titik pemasangan tersebut ditentukan oleh <mount_point>.
Untuk informasi selengkapnya tentang opsi mount yang dapat dikonfigurasi saat memount OSS-HDFS, lihat Lampiran 2: Opsi mount.
Jalankan perintah berikut untuk memeriksa apakah OSS-HDFS telah dimount:
ps -ef | grep jindo-fuse
Jika hasil berikut dikembalikan, berarti OSS-HDFS telah dimount:
root 2162 1 0 13:21 ? 00:00:00 jindo-fuse <mount_point> -ouri=[<oss_path>]
root 2714 2640 0 13:39 pts/0 00:00:00 grep --color=auto jindo-fuse
Gunakan JindoFuse untuk melakukan operasi baca dan tulis pada objek di OSS-HDFS.
Buat direktori
mkdir /mnt/oss/dir1
Daftar semua subdirektori di direktori /mnt/oss/
ls /mnt/oss/
Tulis objek
echo "hello world" > /mnt/oss/dir1/hello.txt
Baca objek
cat /mnt/oss/dir1/hello.txt
Hapus direktori
rm -rf /mnt/oss/dir1/
Opsional. Unmount OSS-HDFS.
Anda dapat melakukan unmount OSS-HDFS dengan salah satu metode berikut:
Unmount OSS-HDFS secara manual
umount <mount_point>
Unmount OSS-HDFS secara otomatis
-oauto_unmount
Anda dapat menjalankan perintah di atas untuk mengirim sinyal SIGINT ke proses jindo-fuse menggunakan killall -9 jindo-fuse. OSS-HDFS akan otomatis di-unmount sebelum proses keluar.
FAQ
Bagaimana cara mengatasi error JindoFuse?
Jika Anda menggunakan JindoSDK untuk memanggil operasi API, detail pesan error akan ditampilkan saat error terjadi. Namun, jika Anda menggunakan JindoFuse, Anda hanya dapat melihat pesan error bawaan dari sistem operasi.
ls: /mnt/oss/: Input/output error
Untuk mengidentifikasi penyebab error, cari file jindosdk.log di path yang ditentukan oleh item konfigurasi logger.dir JindoSDK. Berikut contoh pesan error autentikasi umum yang mungkin muncul saat menggunakan JindoFuse:
EMMDD HH:mm:ss jindofs_connectivity.cpp:13] Please check your Endpoint/Bucket/RoleArn.
Failed test connectivity, operation: mkdir, errMsg: [RequestId]: 618B8183343EA53531C62B74 [HostId]: oss-cn-shanghai-internal.aliyuncs.com [ErrorMessage]: [E1010]HTTP/1.1 403 Forbidden ...
Jika pesan error tersebut muncul, periksa apakah endpoint, bucket, dan ARN role telah dikonfigurasi dengan benar. Untuk informasi selengkapnya, lihat Panduan cepat: Hubungkan kluster non-EMR ke layanan OSS-HDFS.
Jika Anda mengalami error pemrograman, submit a ticket untuk meminta dukungan teknis.
Lampiran 1: Operasi yang didukung
Tabel berikut menjelaskan operasi API berbasis POSIX yang didukung oleh JindoFuse.
Operasi | Deskripsi |
getattr() | Menanyakan atribut suatu objek. Operasi ini mirip dengan perintah ls. |
mkdir() | Membuat direktori. Operasi ini mirip dengan perintah mkdir. |
rmdir() | Menghapus direktori. Operasi ini mirip dengan perintah rm -rf. |
unlink() | Menghapus objek. Operasi ini mirip dengan perintah unlink. |
rename() | Mengganti nama objek atau direktori. Operasi ini mirip dengan perintah mv. |
read() | Membaca data secara berurutan. |
pread() | Membaca data secara acak. |
write() | Menulis data secara berurutan. |
pwrite() | Menulis data secara acak. |
flush() | Mengosongkan data dari memori ke cache kernel. |
fsync() | Mengosongkan data dari memori ke disk. |
release() | Menutup objek. |
readdir() | Membaca direktori. |
create() | Membuat objek. |
open() O_APPEND | Membuka objek menggunakan mode append. |
open() O_TRUNC | Membuka objek menggunakan mode overwrite. |
ftruncate() | Memotong objek yang sedang dibuka. |
truncate() | Memotong objek yang tertutup. Operasi ini mirip dengan perintah truncate -s. |
lseek() | Menentukan lokasi baca dan tulis dalam objek yang terbuka. |
chmod() | Memodifikasi izin pada objek. Operasi ini mirip dengan perintah chmod. |
access() | Menanyakan izin pada objek. |
utimes() | Memodifikasi waktu penyimpanan dan modifikasi objek. |
setxattr() | Memodifikasi atribut xattr objek. |
getxattr() | Menanyakan atribut xattr objek. |
listxattr() | Menampilkan daftar atribut xattr objek. |
removexattr() | Menghapus atribut xattr objek. |
lock() | Mendukung kunci POSIX. Operasi ini mirip dengan perintah fcntl. |
fallocate() | Mengalokasikan ruang fisik untuk objek. |
symlink() | Membuat tautan simbolik. Tautan simbolik hanya tersedia di OSS-HDFS dan tidak mendukung akselerasi cache. |
readlink() | Membaca tautan simbolik. |
Lampiran 2: Opsi mount
Tabel berikut menjelaskan opsi yang dapat dikonfigurasi untuk menggunakan JindoFuse guna memount objek dari OSS-HDFS ke sistem file lokal.
Opsi | Wajib | Deskripsi | Contoh |
uri | Ya | Path dls yang ingin Anda petakan. Path tersebut dapat berupa direktori root bucket, seperti -ouri=oss://bucket.endpoint/. Atau dapat pula berupa subdirektori bucket, seperti -ouri=oss://bucket.endpoint/subdir. | -ouri=oss://examplebucket.cn-beijing.oss-dls.aliyuncs.com/ |
f | Tidak | Menjalankan proses JindoFuse. Secara default, proses daemon digunakan untuk menjalankan JindoFuse di latar belakang. Jika Anda menggunakan opsi ini, kami sarankan untuk mengaktifkan log terminal. | -f |
d | Tidak | Mengaktifkan mode debug. Jika Anda mengaktifkan mode debug, proses JindoFuse akan berjalan di foreground. Jika Anda menggunakan opsi ini, kami sarankan untuk mengaktifkan log terminal. | -d |
auto_unmount | Tidak | Otomatis unmount titik mount setelah proses JindoFuse keluar. | -oauto_unmount |
ro | Tidak | Mount objek dari OSS-HDFS dalam mode read-only. Setelah opsi ini diaktifkan, Anda tidak dapat melakukan operasi tulis. | -oro |
direct_io | Tidak | Memungkinkan pembacaan dan penulisan objek tanpa menggunakan page cache. | -odirect_io |
kernel_cache | Tidak | Menggunakan cache kernel untuk mengoptimalkan performa baca. | -okernel_cache |
auto_cache | Tidak | Mengaktifkan caching otomatis secara default. Berbeda dengan kernel-cache, auto-cache mengaktifkan flushing cache secara otomatis jika ukuran objek atau waktu modifikasi objek berubah. | -oauto_cache |
entry_timeout | Tidak | Periode retensi nama objek dalam cache saat objek dibaca. Satuan: detik. Opsi ini digunakan untuk mengoptimalkan performa. Nilai 0 berarti nama objek tidak di-cache. Nilai default: 0,1. | -oentry_timeout=60 |
attr_timeout | Tidak | Periode retensi atribut objek dalam cache. Satuan: detik. Opsi ini digunakan untuk mengoptimalkan performa. Nilai 0 berarti atribut objek tidak di-cache. Nilai default: 0,1. | -oattr_timeout=60 |
negative_timeout | Tidak | Periode retensi nama objek dalam cache jika objek gagal dibaca. Satuan: detik. Opsi ini digunakan untuk mengoptimalkan performa. Nilai 0 berarti nama objek tidak di-cache. Nilai default: 0,1. | -onegative_timeout=0 |
jindo_entry_size | Tidak | Jumlah direktori yang di-cache. Opsi ini digunakan untuk mengoptimalkan performa readdir. Nilai 0 berarti direktori tidak di-cache. Nilai default: 5000. | -ojindo_entry_size=5000 |
jindo_attr_size | Tidak | Jumlah atribut objek yang di-cache. Opsi ini digunakan untuk mengoptimalkan performa getattr. Nilai 0 berarti atribut objek tidak di-cache. Nilai default: 50000. | -ojindo_attr_sizet=50000 |
max_idle_threads | Tidak | Jumlah maksimum thread idle. Nilai default: 10. | -omax_idle_threads=10 |
metrics_port | Tidak | Mengaktifkan port HTTP untuk mengeluarkan metrik, seperti http://localhost:9090/brpc_metrics. Nilai default: 9090. | -ometrics_port=9090 |
enable_pread | Tidak | Memanggil operasi pread untuk membaca objek. | -oenable_pread |
Lampiran 3: Item konfigurasi
Item | Node konfigurasi | Deskripsi |
logger.dir | common | Direktori tempat log disimpan. Nilai default: /tmp/jindodata-log. |
logger.sync | common | Mode pengembalian log. Nilai yang valid: |
logger.consolelogger | common | Menentukan apakah log ditampilkan. Nilai yang valid: |
logger.level | common | Mengembalikan log yang tingkatnya lebih besar atau sama dengan nilai item konfigurasi ini. Aktifkan log terminal Nilai yang valid untuk tingkat log: 0 hingga 6. Pemetaan antara nilai item konfigurasi ini dan tingkat log sebagai berikut: 0: TRACE 1: DEBUG 2 (default): INFO 3: WARN 4: ERROR 5: CRITICAL 6: OFF
Nonaktifkan log terminal Tingkat log yang kurang dari atau sama dengan 1 menunjukkan WARN. Tingkat log yang lebih besar dari 1 menunjukkan INFO.
|
logger.verbose | common | Mengembalikan log Verbose yang tingkatnya lebih besar atau sama dengan nilai item konfigurasi ini. Nilai yang valid: 0 hingga 99. Nilai default: 0. Nilai 0 berarti tidak ada log Verbose yang dikembalikan. |
logger.cleaner.enable | common | Menentukan apakah pembersihan log diaktifkan. Nilai yang valid: |
fs.oss.endpoint | jindosdk | Titik akhir yang digunakan untuk mengakses OSS-HDFS. Contoh: cn-hangzhou.oss-dls.aliyuncs.com. |
fs.oss.accessKeyId | jindosdk | ID AccessKey yang digunakan untuk mengakses OSS-HDFS. |
fs.oss.accessKeySecret | jindosdk | Rahasia AccessKey yang digunakan untuk mengakses OSS-HDFS. |