Java API

Ozone 自带了支持 RPC 的客户端库,对于一般的应用场景也可以使用兼容 AWS S3 的 REST 接口替代 Ozone 客户端 API。

创建 Ozone 客户端

ozone 客户端由客户端工厂创建,我们可以通过如下调用获得一个 RPC 客户端对象:

  1. OzoneClient ozClient = OzoneClientFactory.getRpcClient();

如果用户想要创建指定配置的客户端,可以这样调用:

  1. OzoneClient ozClient = OzoneClientFactory.getClient();

这样就会返回一个合适的客户端对象。

使用 Ozone 客户端写数据

ozone 中的数据层次为卷、桶和键。卷是桶的集合,桶是键的集合,如果要向 ozone 写数据,你需要依次获得卷、桶和键。

创建卷

有了客户端对象之后,我们需要获取 ObjectStore 的引用,获取方法为:

  1. ObjectStore objectStore = ozClient.getObjectStore();

ObjectStore 对象表示了客户端连接的集群。

  1. // 让我们创建一个卷来存储资产数据
  2. // 使用默认参数来创建资产卷
  3. objectStore.createVolume("assets");
  4. // 验证 assets 卷是否已创建
  5. OzoneVolume assets = objectStore.getVolume("assets");

createVolume 方法也支持传入参数数组来指定卷的创建参数。

创建桶

有了卷之后,你就可以在卷中创建桶。

  1. // 创建一个名为 videos 的桶
  2. assets.createBucket("videos");
  3. OzoneBucket video = assets.getBucket("videos");

此时我们有了一个可用的卷和一个桶,卷名为 assets ,桶名为 videos

接下来我们创建一个键。

键的读写

通过桶对象可以进行键的读写,下面的代码从本地磁盘读取名为 intro.mp4 的视频文件,并把它存储到我们刚刚创建的 video 桶中。

  1. // 从文件读取数据,需要由用户提供读取函数
  2. byte [] videoData = readFile("intro.mp4");
  3. // 创建一个输出流并写数据
  4. OzoneOutputStream videoStream = video.createKey("intro.mp4", 1048576);
  5. videoStream.write(videoData);
  6. // 写操作完成之后关闭输出流
  7. videoStream.close();
  8. // 我们可以使用同一个桶,通过创建输入流来读取刚刚写入的文件
  9. // 先创建一个用来存储视频的字节数组
  10. byte[] data = new byte[(int)1048576];
  11. OzoneInputStream introStream = video.readKey("intro.mp4");
  12. // 读取 intro.mp4 到缓冲区中
  13. introStream.read(data);
  14. introStream.close();

下面是一个完整的代码示例,请注意代码中 close 函数的调用。

  1. // 创建客户端对象
  2. OzoneClient ozClient = OzoneClientFactory.getClient();
  3. // 通过客户端对象获取 ObjectStore 的引用
  4. ObjectStore objectStore = ozClient.getObjectStore();
  5. // 创建用于存储数据的 assets 卷
  6. // 此处创建的卷采用默认参数
  7. objectStore.createVolume("assets");
  8. // 验证卷是否已创建
  9. OzoneVolume assets = objectStore.getVolume("assets");
  10. // 创建名为 videos 的桶
  11. assets.createBucket("videos");
  12. OzoneBucket video = assets.getBucket("videos");
  13. // 从文件中读取数据,需要用户提供此函数
  14. byte [] videoData = readFile("intro.mp4");
  15. // 创建输出流并写数据
  16. OzoneOutputStream videoStream = video.createKey("intro.mp4", 1048576);
  17. videoStream.write(videoData);
  18. // 写操作完成之后关闭输出流
  19. videoStream.close();
  20. // 我们可以使用同一个桶,通过创建输入流来读取刚刚写入的文件
  21. // 先创建一个用来存储视频的字节数组
  22. byte[] data = new byte[(int)1048576];
  23. OzoneInputStream introStream = video.readKey("intro.mp4");
  24. introStream.read(data);
  25. // 读操作完成之后关闭输入流
  26. introStream.close();
  27. // 关闭客户端
  28. ozClient.close();