JindoFuse使用指南
OSS/OSS-HDFS可以通過(guò)JindoFuse提供POSIX支持,將OSS/OSS-HDFS上的文件掛載到本地文件系統(tǒng)中,讓您能夠像操作本地文件系統(tǒng)一樣操作OSS/OSS-HDFS上的文件。
環(huán)境準(zhǔn)備
- EMR環(huán)境中,默認(rèn)已安裝JindoSDK,可以直接使用。說(shuō)明 訪問(wèn)OSS-HDFS,需創(chuàng)建EMR-3.42.0及以上版本或EMR-5.8.0及以上版本的集群。
- 非EMR環(huán)境,請(qǐng)先安裝部署JindoSDK,詳情請(qǐng)參見(jiàn)在非EMR集群中部署JindoSDK。說(shuō)明 訪問(wèn)OSS-HDFS,需部署JindoSDK 4.x及以上版本。
依賴(lài)準(zhǔn)備
- EMR-3.44.0及之后版本或EMR-5.10.0及之后版本。
- JindoSDK 4.6.2及之后版本。
- JindoSDK 4.5.0及之前版本,需安裝以下依賴(lài)。
# CentOS sudo yum install -y fuse3 fuse3-devel # Debian sudo apt install -y fuse3 libfuse3-dev
- JindoSDK 4.5.1及之后版本,需依賴(lài)libfuse 3.7+。
例如,執(zhí)行以下命令安裝fuse-3.11。
# build fuse required meson & ninja, for debian: apt install -y pkg-config meson ninja-build sudo yum install -y meson ninja-build # compile fuse required newer g++ (only CentOS) 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++ # compile & install 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
掛載JindoFuse
執(zhí)行以下命令,創(chuàng)建一個(gè)掛載點(diǎn)。
mkdir -p <mount_point>
<mount_point>
需替換為一個(gè)本地路徑。例如:/mnt/oss/。執(zhí)行以下命令,掛載JindoFuse。
jindo-fuse <mount_point> -ouri=<oss_path>
<oss_path>
需替換為待映射的OSS/OSS-HDFS路徑,路徑可以為Bucket根目錄或者子目錄。例如:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/。此命令會(huì)啟動(dòng)一個(gè)后臺(tái)的守護(hù)進(jìn)程,將指定的
<oss_path>
掛載到本地文件系統(tǒng)的<mount_point>
。說(shuō)明掛載OSS和OSS-HDFS路徑的方式基本一致,僅路徑中的
endpoint
略有不同。更多信息,請(qǐng)參見(jiàn)OSS/OSS-HDFS快速入門(mén)。執(zhí)行以下命令,確認(rèn)是否掛載成功。
ps -ef | grep jindo-fuse
jindo-fuse進(jìn)程存在,且啟動(dòng)參數(shù)與預(yù)期一致,說(shuō)明掛載成功。
訪問(wèn)JindoFuse
如果將JindoFS服務(wù)掛載到了本地/mnt/oss/,可以執(zhí)行以下命令訪問(wèn)JindoFuse。
查看/mnt/oss/路徑下的所有目錄
ls /mnt/oss/
創(chuàng)建目錄
mkdir /mnt/oss/dir1
寫(xiě)入文件
echo "hello world" > /mnt/oss/dir1/hello.txt
讀取文件
cat /mnt/oss/dir1/hello.txt
顯示
hello world
刪除目錄
rm -rf /mnt/oss/dir1/
卸載JindoFuse
若您想卸載之前掛載的掛載點(diǎn),可以使用如下命令。
umount <mount_point>
您也可以使用-oauto_unmount
參數(shù),自動(dòng)卸載掛載點(diǎn)。使用該參數(shù)后,支持killall -9 jindo-fuse
發(fā)送SIGINT給jindo-fuse進(jìn)程,該進(jìn)程退出前會(huì)自動(dòng)卸載掛載點(diǎn)。
特性支持
目前JindoFuse已經(jīng)支持以下POSIX API。
特性 | 說(shuō)明 | OSS | OSS-HDFS |
getattr() | 查詢(xún)文件屬性 | 支持 | 支持 |
mkdir() | 創(chuàng)建目錄 | 支持 | 支持 |
rmdir() | 刪除目錄 | 支持 | 支持 |
unlink() | 刪除文件 | 支持 | 支持 |
rename() | 重命名文件 | 支持 | 支持 |
read() | 順序讀取 | 支持 | 支持 |
pread() | 隨機(jī)讀取 | 支持 | 支持 |
write() | 順序?qū)懭?/p> | 支持 | 支持 |
pwrite() | 隨機(jī)寫(xiě)入 | 支持 | 支持 |
flush() | 刷新內(nèi)存到內(nèi)核緩沖區(qū) | 僅支持以追加寫(xiě)方式打開(kāi)的文件。 | 支持 |
fsync() | 刷新內(nèi)存到磁盤(pán) | 僅支持以追加寫(xiě)方式打開(kāi)的文件。 | 支持 |
release() | 關(guān)閉文件 | 支持 | 支持 |
readdir() | 讀取目錄 | 支持 | 支持 |
create() | 創(chuàng)建文件 | 支持 | 支持 |
open() O_APPEND | 通過(guò)追加寫(xiě)的方式打開(kāi)文件 | 支持,使用時(shí)有限制值,請(qǐng)參見(jiàn)使用限制。 | 支持 |
open() O_TRUNC | 通過(guò)覆蓋寫(xiě)的方式打開(kāi)文件 | 支持 | 支持 |
ftruncate() | 對(duì)打開(kāi)的文件進(jìn)行截?cái)?/p> | 不支持 | 支持 |
truncate() | 對(duì)未打開(kāi)的文件進(jìn)行截?cái)?/p> | 不支持 | 支持 |
lseek() | 指定打開(kāi)文件中的讀寫(xiě)位置 | 不支持 | 支持 |
chmod() | 修改文件權(quán)限 | 不支持 | 支持 |
access() | 查詢(xún)文件權(quán)限 | 支持 | 支持 |
utimes() | 修改文件的存取時(shí)間和更改時(shí)間 | 不支持 | 支持 |
setxattr() | 修改文件xattr屬性 | 不支持 | 支持 |
getxattr() | 獲取文件xattr屬性 | 不支持 | 支持 |
listxattr() | 列舉文件xattr屬性 | 不支持 | 支持 |
removexattr() | 刪除文件xattr屬性 | 不支持 | 支持 |
lock() | 支持posix鎖 | 不支持 | 支持 |
fallocate() | 為文件預(yù)分配物理空間 | 不支持 | 支持 |
symlink() | 創(chuàng)建軟連接 | 不支持 | 目前僅支持OSS-HDFS內(nèi)部使用,且不支持緩存加速。 |
readlink() | 讀取軟連接 | 不支持 | 支持 |
進(jìn)階使用
掛載參數(shù)選項(xiàng)如下所示。
參數(shù) | 是否必選 | JindoData版本 | 參數(shù)說(shuō)明 | 使用范例 |
uri | 是 | 4.3.0及之后版本 | 配置需要映射的OSS路徑。路徑可以是根目錄,也可以是子目錄。例如:oss://examplebucket/或oss://examplebucket/subdir。 |
|
f | 否 | 4.3.0及之后版本 | 在前端啟動(dòng)進(jìn)程。默認(rèn)使用守護(hù)進(jìn)程方式后臺(tái)啟動(dòng)。使用該參數(shù)時(shí),建議開(kāi)啟終端日志。 |
|
d | 否 | 4.3.0及之后版本 | 使用Debug模式,在前端啟動(dòng)進(jìn)程。使用該參數(shù)時(shí),建議開(kāi)啟終端日志。 |
|
auto_unmount | 否 | 4.3.0及之后版本 | fuse進(jìn)程退出后自動(dòng)卸載掛載節(jié)點(diǎn)。 |
|
ro | 否 | 4.3.0及之后版本 | 只讀掛載,啟用后不允許寫(xiě)操作。 |
|
direct_io | 否 | 4.3.0及之后版本 | 開(kāi)啟后,讀寫(xiě)文件可以繞過(guò)Page Cache。 |
|
kernel_cache | 否 | 4.3.0及之后版本 | 開(kāi)啟后,利用內(nèi)核緩存優(yōu)化讀性能。 |
|
auto_cache | 否 | 4.3.0及之后版本 | 與kernel_cache二選一,與kernel_cache不同的是,如果文件大小或修改時(shí)間發(fā)生變化,緩存就會(huì)失效。默認(rèn)開(kāi)啟。 | 無(wú) |
entry_timeout | 否 | 4.3.0及之后版本 | 文件名讀取緩存保留時(shí)間(秒),用于優(yōu)化性能。默認(rèn)值:60。0表示不緩存。 |
|
attr_timeout | 否 | 4.3.0及之后版本 | 文件屬性緩存保留時(shí)間(秒),用于優(yōu)化性能。默認(rèn)值:60。0表示不緩存。 |
|
negative_timeout | 否 | 4.3.0及之后版本 | 文件名讀取失敗緩存保留時(shí)間(秒),用于優(yōu)化性能。默認(rèn)值:60。0表示不緩存。 |
|
max_idle_threads | 否 | 4.3.0及之后版本 | 處理內(nèi)核回調(diào)的空閑線程池。默認(rèn)值:10。 |
|
xengine | 否 | 4.3.0及之后版本 | 打開(kāi)緩存。 |
|
pread | 否 | 4.5.1及之后版本 | 默認(rèn)使用順序讀。打開(kāi)后,使用隨機(jī)讀代替順序讀,適用于隨機(jī)讀遠(yuǎn)多于順序讀的場(chǎng)景。 |
|
no_symlink | 否 | 4.5.1及之后版本 | 配置后,關(guān)閉symlink功能。 |
|
no_writeback | 否 | 4.5.1及之后版本 | 配置后,關(guān)閉writeback功能。 |
|
no_flock | 否 | 4.5.1及之后版本 | 配置后,關(guān)閉flock功能。 |
|
no_xattr | 否 | 4.5.1及之后版本 | 配置后,關(guān)閉xttar功能。 |
|
配置參數(shù)選項(xiàng)如下所示。
配置項(xiàng) | 默認(rèn)值 | 說(shuō)明 |
logger.dir | /tmp/bigboot-log | 日志目錄,若不存在會(huì)自動(dòng)創(chuàng)建。 |
logger.sync | false | 是否同步輸出日志,false表示異步輸出。 |
logger.consolelogger | false | 打印日志到終端。 |
logger.level | 2 | 輸出大于等于該等級(jí)的日志,取值如下:
|
logger.verbose | 0 | 輸出大于等于該等級(jí)的VERBOSE日志,等級(jí)范圍為0-99,0表示不輸出。 |
logger.cleaner.enable | false | 是否開(kāi)啟日志清理功能。 |
fs.oss.endpoint | 無(wú) | 訪問(wèn)JindoFS服務(wù)的地址,例如:oss-cn-xxx.aliyuncs.com。 |
fs.oss.accessKeyId | 無(wú) | 訪問(wèn)JindoFS服務(wù)需要的AccessKey ID。 |
fs.oss.accessKeySecret | 無(wú) | 訪問(wèn)JindoFS服務(wù)需要的AccessKey Secret。 |
支持在掛載時(shí)同時(shí)指定JindoSDK配置參數(shù)和掛載選項(xiàng),掛載時(shí)指定參數(shù)的優(yōu)先級(jí)需高于配置文件,例如:
jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<YOUR_ENDPOINT>] -ofs.oss.accessKeyId=[<YOUR_KEY_ID>] -ofs.oss.accessKeySecret=[<YOUR_KEY_SECRET>]
常見(jiàn)問(wèn)題
使用JindoFuse時(shí)如何定位錯(cuò)誤信息?
不同于使用JindoSDK調(diào)用API時(shí)可以獲取更為具體的錯(cuò)誤信息,JindoFuse只能顯示操作系統(tǒng)預(yù)設(shè)的錯(cuò)誤信息。如果需要定位具體的錯(cuò)誤原因,可以根據(jù)JindoSDK配置中的logger.dir,在指定路徑下的jindosdk.log
文件中,尋找具體的錯(cuò)誤。