新底层存储系统扩展软件

Slack Docker Pulls GitHub edit source

该页是面向底层存储扩展的开发者的。请浏览管理使用新底层存储系统扩展文档来获取使用已有扩展的指导。

底层存储扩展被构建为jar,并包含在一个特定的扩展位置,由Alluxio core提取。这一页描述了在Alluxio中的扩展如何工作的机制,并提供了开发底层存储扩展的详细说明。扩展提供了一个框架,使更多的存储库能够使用Alluxio,并使开发Alluxio不支持的模块变得方便。

工作原理

发现服务

扩展jar包在Alluxio server运行时动态加载,使得Alluxio能与新的底层存储扩展交互而不用重启。 Alluxio server使用Java ServiceLoader来发现底层存储API。 提供者要把alluxio.underfs.UnderFileSystemFactory的接口的实现包含在内。 实现的宣传方式是在META-INF/services中包含一个文本文件,其中只有一行指向实现该接口的类。

依赖管理

实现者需要将传递的依赖包含在扩展jar包内。Alluxio为每个扩展jar包实行独立的类加载来避免Alluxio server和扩展之间的冲突。

实现一个底层存储扩展

建立一个新的底层存储连接涉及:

  • 实现所需的存储接口

  • 声明服务实现

  • 将实现和传递依赖打包到一个uber JAR中

参考的实现可以在alluxio-extensions找到。 本章剩余部分将介绍写一个新底层存储扩展的步骤。名为DummyUnderFileSystem的样例,使用maven作为build和依赖管理工具,并将所有操作转发到本地文件系统。

实现底层存储接口

HDFS SubmoduleS3 Submodule是两个将存储系统对接Alluxio好的样例。

步骤1:实现接口UnderFileSystem

UnderFileSystem接口定义在模块org.alluxio:alluxio-core-common中。选择扩展BaseUnderFileSystemObjectUnderFileSystem来完成UnderFileSystem接口。 ObjectUnderFileSystem适合连接到对象存储,并将文件系统操作抽象为对象存储。

  1. public class DummyUnderFileSystem extends BaseUnderFileSystem {
  2. // Implement filesystem operations
  3. ...
  4. }

或是,

  1. public class DummyUnderFileSystem extends ObjectUnderFileSystem {
  2. // Implement object store operations
  3. ...
  4. }

步骤2:完成接口UnderFileSystemFactory

底层存储factory定义了UnderFileSystem实现支持的路径,以及如何创建UnderFileSystem实现。

  1. public class DummyUnderFileSystemFactory implements UnderFileSystemFactory {
  2. ...
  3. @Override
  4. public UnderFileSystem create(String path, UnderFileSystemConfiguration conf) {
  5. // Create the under storage instance
  6. }
  7. @Override
  8. public boolean supportsPath(String path) {
  9. // Choose which schemes to support, e.g., dummy://
  10. }
  11. }

声明该服务

src/main/resources/META-INF/services/alluxio.underfs.UnderFileSystemFactory创建文件来告知ServiceLoader完成的UnderFileSystemFactory

  1. alluxio.underfs.dummy.DummyUnderFileSystemFactory

编译

使用maven-shade-pluginmaven-assembly将扩展工程的所有传递依赖包含在built jar中。 此外,为了避免冲突,指定依赖alluxio-core-common的范围为provided。maven定义像下面这样:

  1. <dependencies>
  2. <!-- Core Alluxio dependencies -->
  3. <dependency>
  4. <groupId>org.alluxio</groupId>
  5. <artifactId>alluxio-core-common</artifactId>
  6. <scope>provided</scope>
  7. </dependency>
  8. ...
  9. </dependencies>

测试

扩展AbstractUnderFileSystemContractTest来测试定义的UnderFileSystem符合Alluxio与底层存储模块的约定。 看下面的参考实现来将测试参数包含。

  1. public final class DummyUnderFileSystemContractTest extends AbstractUnderFileSystemContractTest {
  2. ...
  3. }

恭喜!你已经开发了一个Alluxio的新底层存储扩展。 向Alluxio repository提交一个pull request来让社区知道它,在documentation page章节编辑扩展列表。