天天看点

HCFSFuse——一个万能的Fuse背景HCFS 协议是什么HCFSFuse 的架构原理HCFSFuse 的编译使用 HCFSFuse如何参与贡献未来规划

背景

HCFSFuse 是基于 Alluxio Fuse 进行分层扩展而实现的一个 Fuse 程序,区别于 Alluxio,HCFSFuse 除了保留 Alluxio Fuse 原有的访问 Alluxio 集群的功能外,还提供了访问 HDFS、Ozone、aws、oss、cos、CephFS 等实现 HCFS(Hadoop compatible Filesystem) 的存储系统。现如今,HCFS 协议已经在大数据生态成为了一个文件系统标准,在其它领域 HCFS 协议也正在扩大其影响力,因此,使用 HCFSFuse,可以在大多数场景中发挥挂载文件系统,实现 POSIX 文件系统的能力。

HCFS 协议是什么

HCFS (Hadoop Compatible FileSystem),以依赖库的无服务形式,可以被用户应用所依赖,不是一个额外的代理转发服务。目前 HCFS FileSystem 支持的存储系统已经非常之多。Hadoop 仓库内有如下支持,其中就有对主流云厂商存储系统的支持。

HCFSFuse——一个万能的Fuse背景HCFS 协议是什么HCFSFuse 的架构原理HCFSFuse 的编译使用 HCFSFuse如何参与贡献未来规划

下图是类继承关系,可以看出 HDFS 内部已经有很多 FS 原生支持了,其中就有 HDFS, S3, 阿里云的OSS, 腾讯云 COSN, 以及 LocalFilesystem 的实现。

HCFSFuse——一个万能的Fuse背景HCFS 协议是什么HCFSFuse 的架构原理HCFSFuse 的编译使用 HCFSFuse如何参与贡献未来规划

此外,还支持自己扩展FileSystem的子类,从而遵从HDFS 兼容API。这种第三方的文件系统也有很多,比如Ozone, Alluxio, CephFS 等。

HCFSFuse 的架构原理

HCFSFuse——一个万能的Fuse背景HCFS 协议是什么HCFSFuse 的架构原理HCFSFuse 的编译使用 HCFSFuse如何参与贡献未来规划

HCFSFuse 扩展自 alluxio-fuse 模块,保留了 AlluxioFuse 的原有实现。在此基础上,扩展了 HCFSFuseFilesystem 这个对接 实现 HCFS 的底层存储的后端实现。

启动 HCFSFuse 程序,可以将后端 ozone、hdfs、alluxio、aws、oss、cos 等存储系统挂载到本地挂载点,提供本地文件系统。

应用程序访问挂载点的请求,会转到用户态 Fuse kernel 模块,并通过 libfuse 传递到用户态 HCFSFuse 程序,把应用程序的请求代理访问到对应的后端存储,把结果返回原路返回给应用程序。

由于使用 HCFS 访问底层存储,Ozone 作为远端存储的情况下,rename 操作的性能比使用 Goofys (基于 s3 协议的 FUSE 实现) 高出一个数量级,因为 s3 协议没有 rename api,rename 操作只能是 Copy & Delete,而 HCFS 协议有 rename API,并且 Ozone Manager 也实现了 rename API,因此,只需要元数据操作就完成了 rename。

HCFSFuse 的编译

git clone https://github.com/opendataio/hcfsfuse.git
mvn clean package
           

可以通过**-Dhadoop.version=3.2.1 -Dozone.version=1.0.0**, 设置hadoop、ozone 或其它组件的版本。

打包完成,会在 target 目录生成 hcfsfuse--jar-with-dependencies.jar.

使用 HCFSFuse

不加任何参数执行,可以查看 help 信息。

# 下载最新 release 的版本或自己编译 master 分支的版本。
wget https://github.com/opendataio/hcfsfuse/releases/download/v0.0.10/hcfs-fuse.jar
java -jar hcfsfuse-1.0.0-SNAPSHOT-jar-with-dependencies.jar -c core-site.xml -c another-site.xml -m /Users/mbl/fusefs -r file:///tmp/
           

此后,可以在挂载点 /Users/mbl/fusefs 之下,执行 ls, touch, cp, rm, cat 等命令。

如果想删除挂载点,可以执行。

umount /Users/mbl/fusefs
           

如何参与贡献

  • 关注 star 项目 https://github.com/opendataio/hcfsfuse
  • 提交 issue,可以是需求或者问题
  • Fork 代码仓库,以 Pull Request 的方式,贡献你的代码

未来规划

站在 Alluxio 巨人的肩膀上,HCFSFuse 有着巨大的优势,可以依靠 Alluxio 为 HCFSFuse 提供数据缓存能力,数据编排能力。也可以通过 viewfs 进行挂载点映射,可以同时把不同的存储映射到同一个 HCFSFuse 的挂载点中。

在性能优化,和稳定性提升方面,一直会是 HCFSFuse 的核心目标。