Jika Anda ingin memetakan OSS-HDFS ke sistem file lokal dan mengakses objek di OSS-HDFS menggunakan API HDFS standar serta melakukan operasi seperti membaca, menulis, dan menghapus objek, Anda dapat menggunakan JindoFuse. JindoFuse adalah alat yang memungkinkan Anda mengakses sistem file terdistribusi sumber terbuka yang kompatibel dengan POSIX. JindoFuse juga memungkinkan aplikasi AI menggunakan OSS-HDFS secara langsung untuk penyimpanan dan pemrosesan data.
Prasyarat
OSS-HDFS telah diaktifkan untuk sebuah bucket dan izin telah diberikan untuk mengakses OSS-HDFS. Untuk informasi lebih lanjut, lihat Aktifkan OSS-HDFS.
Persiapan
Anda dapat menggunakan salah satu metode berikut untuk mengakses OSS-HDFS:
Jika Anda ingin mengakses OSS-HDFS menggunakan klaster EMR Alibaba Cloud, pastikan bahwa klaster EMR versi 3.44.0 atau lebih baru atau 5.10.0 atau lebih baru telah dibuat. Klaster EMR yang memenuhi persyaratan ini terintegrasi dengan JindoFuse secara default. Untuk informasi lebih lanjut, lihat Buat klaster.
Jika Anda tidak ingin mengakses OSS-HDFS menggunakan klaster EMR Alibaba Cloud, pastikan bahwa JindoSDK 4.6.2 atau lebih baru telah diinstal dan diterapkan. Untuk informasi lebih lanjut, lihat Terapkan JindoSDK di lingkungan selain EMR.
Prosedur
Konfigurasikan variabel lingkungan.
Jika Anda ingin mengakses OSS-HDFS menggunakan klaster EMR Alibaba Cloud, lewati langkah ini dan lanjutkan ke Langkah 2.
Jika Anda tidak ingin mengakses OSS-HDFS menggunakan klaster EMR Alibaba Cloud, lakukan langkah-langkah berikut untuk mengonfigurasi JindoFuse:
Hubungkan ke instance ECS. Untuk informasi lebih lanjut, lihat Hubungkan ke instance.
Ubah variabel lingkungan.
Dalam contoh ini, jindosdk-x.x.x diinstal di path root/. x.x.x menunjukkan nomor versi JindoSDK. Ubah variabel lingkungan berdasarkan 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 konfigurasi jindosdk.cfg:
[common]
logger.dir = /tmp/fuse-log
[jindosdk]
<!-- Dalam contoh ini, wilayah China (Hangzhou) digunakan. Tentukan wilayah sebenarnya Anda. -->
fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com
<! -- Konfigurasikan ID AccessKey dan Rahasia AccessKey yang digunakan 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 path dls yang ingin Anda petakan. Path tersebut bisa berupa direktori root atau subdirektori dari bucket. Setelah Anda menjalankan perintah, proses daemon di latar belakang mulai memasang <oss_path> yang Anda tentukan ke titik mount sistem file lokal. Titik mount ditentukan oleh <mount_point>.
Untuk informasi lebih lanjut tentang opsi mount yang dapat Anda konfigurasikan saat memasang 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, 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 melepas OSS-HDFS menggunakan salah satu metode berikut:
Lepas OSS-HDFS secara manual
umount <mount_point>
Lepas OSS-HDFS secara otomatis
-oauto_unmount
Anda dapat menjalankan perintah di atas untuk mengirim SIGINT ke proses jindo-fuse menggunakan killall -9 jindo-fuse. OSS-HDFS dilepas secara otomatis sebelum proses keluar.
FAQ
Bagaimana cara memecahkan masalah kesalahan JindoFuse?
Jika Anda menggunakan JindoSDK untuk memanggil operasi API, Anda dapat melihat detail pesan kesalahan ketika kesalahan dilaporkan. Jika Anda menggunakan JindoFuse, Anda hanya dapat melihat pesan kesalahan preset dari sistem operasi.
ls: /mnt/oss/: Kesalahan input/output
Untuk mengidentifikasi penyebab kesalahan, Anda harus menemukan file jindosdk.log di path yang ditentukan oleh item konfigurasi logger.dir JindoSDK. Pesan berikut adalah pesan kesalahan autentikasi umum yang mungkin muncul saat Anda menggunakan JindoFuse:
EMMDD HH:mm:ss jindofs_connectivity.cpp:13] Harap periksa Endpoint/Bucket/RoleArn Anda.
Gagal uji konektivitas, operasi: mkdir, errMsg: [RequestId]: 618B8183343EA53531C62B74 [HostId]: oss-cn-shanghai-internal.aliyuncs.com [ErrorMessage]: [E1010]HTTP/1.1 403 Forbidden ...
Jika pesan kesalahan di atas muncul, periksa apakah endpoint, bucket, dan role ARN dikonfigurasi dengan benar. Untuk informasi lebih lanjut, lihat Hubungkan klaster non-EMR ke OSS-HDFS.
Jika terjadi kesalahan program, ajukan tiket.
Lampiran 1: Operasi yang didukung
Tabel berikut menjelaskan operasi API berbasis POSIX yang didukung oleh JindoFuse.
Operasi | Deskripsi |
getattr() | Mengquery atribut 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() | Membuang data dari memori ke cache kernel. |
fsync() | Membuang data dari memori ke disk. |
release() | Menutup objek. |
readdir() | Membaca direktori. |
create() | Membuat objek. |
open() O_APPEND | Membuka objek menggunakan mode tambahan. |
open() O_TRUNC | Membuka objek menggunakan mode timpa. |
ftruncate() | Memotong objek yang dibuka. |
truncate() | Memotong objek yang ditutup. Operasi ini mirip dengan perintah truncate -s. |
lseek() | Menentukan lokasi baca dan tulis dalam objek terbuka. |
chmod() | Memodifikasi izin pada objek. Operasi ini mirip dengan perintah chmod. |
access() | Mengquery izin pada objek. |
utimes() | Memodifikasi waktu penyimpanan dan modifikasi objek. |
setxattr() | Memodifikasi atribut xattr objek. |
getxattr() | Mengquery atribut xattr objek. |
listxattr() | Mendaftar atribut xattr objek. |
removexattr() | Menghapus atribut xattr objek. |
lock() | Mendukung kunci POSIX. Operasi ini mirip dengan perintah fcntl. |
fallocate() | Mengalokasikan ruang fisik ke objek. |
symlink() | Membuat tautan simbolik. Tautan simbolik hanya tersedia di OSS-HDFS dan tidak mendukung percepatan cache. |
readlink() | Membaca tautan simbolik. |
Lampiran 2: Opsi Mount
Tabel berikut menjelaskan opsi yang dapat Anda konfigurasikan untuk menggunakan JindoFuse memasang objek dari OSS-HDFS ke sistem file lokal.
Opsi | Wajib | Deskripsi | Contoh |
uri | Ya | Path dls yang ingin Anda petakan. Path tersebut bisa berupa direktori root bucket, seperti -ouri=oss://bucket.endpoint/. Bisa juga berupa subdirektori bucket, seperti -ouri=oss://bucket.endpoint/subdir. | -ouri=oss://examplebucket.cn-beijing.oss-dls.aliyuncs.com/ |
f | Tidak | Memulai proses JindoFuse. Secara default, proses daemon digunakan untuk memulai proses 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 dimulai di latar depan. Jika Anda menggunakan opsi ini, kami sarankan untuk mengaktifkan log terminal. | -d |
auto_unmount | Tidak | Secara otomatis melepas titik mount setelah proses JindoFuse keluar. | -oauto_unmount |
ro | Tidak | Memasang objek dari OSS-HDFS dalam mode hanya-baca. Setelah Anda mengaktifkan opsi ini, Anda tidak dapat melakukan operasi tulis. | -oro |
direct_io | Tidak | Mengizinkan pembacaan dan penulisan objek tanpa memerlukan page cache. | -odirect_io |
kernel_cache | Tidak | Menggunakan cache kernel untuk mengoptimalkan kinerja baca. | -okernel_cache |
auto_cache | Tidak | Mengaktifkan caching otomatis secara default. Berbeda dengan kernel-cache, auto-cache mengaktifkan flushing otomatis cache jika ukuran objek atau waktu modifikasi objek berubah. | -oauto_cache |
entry_timeout | Tidak | Periode retensi nama objek dalam cache saat objek dibaca. Unit: detik. Opsi ini digunakan untuk mengoptimalkan kinerja. Nilai 0 menentukan bahwa nama objek tidak di-cache. Nilai default: 0.1. | -oentry_timeout=60 |
attr_timeout | Tidak | Periode retensi atribut objek dalam cache. Unit: detik. Opsi ini digunakan untuk mengoptimalkan kinerja. Nilai 0 menentukan bahwa 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. Unit: detik. Opsi ini digunakan untuk mengoptimalkan kinerja. Nilai 0 menentukan bahwa 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 kinerja readdir. Nilai 0 menunjukkan bahwa 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 kinerja getattr. Nilai 0 menentukan bahwa 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 valid: |
logger.consolelogger | common | Menentukan apakah akan menampilkan log. Nilai valid: |
logger.level | common | Mengembalikan log yang levelnya lebih besar dari atau sama dengan nilai item konfigurasi ini. Aktifkan log terminal Nilai valid untuk level log: 0 hingga 6. Berikut adalah pemetaan antara nilai item konfigurasi ini dan level log: 0: TRACE 1: DEBUG 2 (default): INFO 3: WARN 4: ERROR 5: CRITICAL 6: OFF
Nonaktifkan log terminal Level log kurang dari atau sama dengan 1 menunjukkan WARN. Level log lebih dari 1 menunjukkan INFO.
|
logger.verbose | common | Mengembalikan log Verbose yang levelnya lebih besar dari atau sama dengan nilai item konfigurasi ini. Nilai valid: 0 hingga 99. Nilai default: 0. Nilai 0 menentukan bahwa tidak ada log Verbose yang dikembalikan. |
logger.cleaner.enable | common | Menentukan apakah akan mengaktifkan pembersihan log. Nilai valid: |
fs.oss.endpoint | jindosdk | Endpoint 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. |