如果您希望将OSS-HDFS服务映射为一个本地文件系统,然后通过标准的文件系统接口(例如读、写、删除文件等)访问OSS-HDFS服务中的文件,您可以使用JindoFuse挂载访问的方式。JindoFuse是一个开源的分布式文件系统访问工具,同时兼容POSIX,使得AI应用程序可以直接使用OSS-HDFS服务作为数据存储和处理的解决方案。
前提条件
已开通并授权访问OSS-HDFS服务。具体操作,请参见开通并授权访问OSS-HDFS服务。
环境准备
您可以选择以下任意一种方式访问OSS-HDFS服务。
通过阿里云EMR访问OSS-HDFS服务,确保已创建EMR-3.44.0及以上版本或EMR-5.10.0及以上版本的集群。满足版本要求的EMR集群默认集成了JindoFuse。具体操作,请参见创建集群。
通过非阿里云EMR访问OSS-HDFS服务,确保已安装和部署4.6.2及以上版本JindoSDK。具体操作,请参见在非EMR集群中部署JindoSDK。
操作步骤
配置环境变量。
如果通过阿里云EMR访问OSS-HDFS服务,则直接跳过此步骤,执行下一步。
如果通过非阿里云EMR访问OSS-HDFS服务,则按照以下说明配置JindoFuse。
连接ECS实例。具体操作,请参见连接ECS实例。
添加环境变量。
以jindosdk-x.x.x(x.x.x表示JindoSDK的版本号)安装在root/路径为例。请根据JindoSDK安装的实际路径修改环境变量。
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
添加配置文件。
在JindoSDK的conf/目录下新建配置文件jindosdk.cfg。
在jindosdk.cfg配置文件中添加以下配置项。
[common] logger.dir = /tmp/fuse-log [jindosdk] <!-- 以下以杭州地域为例,其他地域请根据实际情况替换。 --> fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com <!-- 配置访问OSS-HDFS服务的AccessKeyId、AccessKeySecret。 --> fs.oss.accessKeyId = LTAI******** fs.oss.accessKeySecret = KZo1********
挂载OSS-HDFS服务。
创建挂载点。
mkdir -p <mount-point>
挂载OSS-HDFS服务。
jindo-fuse <mount_point> -ouri=[<oss_path>]
-ouri需配置为待映射的dls路径,路径可以为Bucket根目录或者子目录。执行该命令会启动后台的守护进程,将指定的<oss_path>挂载到本地文件系统的<mount_point>。
关于挂载Fuse过程中可以配置的挂载选项的更多信息,请参见挂载选项 。
执行以下命令,确认是否挂载成功。
ps -ef | grep jindo-fuse
返回结果如下,说明已成功挂载OSS-HDFS服务。
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
通过JindoFuse执行文件读写相关操作。
创建目录
mkdir /mnt/oss/dir1
列举/mnt/oss/下的所有目录:
ls /mnt/oss/
写入文件:
echo "hello world" > /mnt/oss/dir1/hello.txt
读取文件:
cat /mnt/oss/dir1/hello.txt
删除目录:
rm -rf /mnt/oss/dir1/
(可选)取消挂载OSS-HDFS服务。
您可以使用以下两种方式取消挂载。
手动取消挂载
umount <mount_point>
自动取消挂载
-oauto_unmount
使用以上命令支持通过
killall -9 jindo-fuse
发送SIGINT到jindo-fuse进程,进程退出前会自动取消挂载OSS-HDFS服务。
常见问题
如何排查JindoFuse错误?
与JindoSDK调用API过程中可获取到详细的错误信息ErrorMsg不同,JindoFuse只显示操作系统预设的错误信息:
ls: /mnt/oss/: Input/output error
如果您需要定位具体的错误原因,请前往JindoSDK配置项logger.dir指定路径下的jindosdk.log文件。如下为使用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 ...
收到以上报错信息后,请自行排查Endpoint、Bucket以及RoleArn配置信息是否正确。关于Endpoint、Bucket、RoleArn的配置详情,请参见非EMR集群接入OSS-HDFS服务快速入门。
如果遇到程序类报错,请提交工单申请处理。