Alluxio 1.4版本的重要新特性介绍-阿里云开发者社区

开发者社区> 开发与运维> 正文

Alluxio 1.4版本的重要新特性介绍

简介: Alluxio 1.4.0已经发布了大量的新功能和改进。本篇博客介绍Alluxio 1.4.0开源版本的一些重要特性。 • 改进的Alluxio底层存储API • 文件系统REST接口 • 数据包流 1.改进的Alluxio底层存储API Alluxio是计算和数据存储之间的桥梁。

Alluxio 1.4.0已经发布了大量的新功能和改进。本篇博客介绍Alluxio 1.4.0开源版本的一些重要特性。
• 改进的Alluxio底层存储API
• 文件系统REST接口
• 数据包流

1.改进的Alluxio底层存储API

Alluxio是计算和数据存储之间的桥梁。底层存储API的初始版本是Alluxio文件系统API的镜像,并针对底层存储系统进行了裁剪,这些底层存储系统提供了类HDFS的文件系统API。对象存储,无论是公共的还是私有的,已经日益成为各种用例的后台存储选择。因此,底层存储 API需要改进,以更好地为对象存储和文件系统存储提供最好的服务。
对象存储具有扁平的命名空间,其只有一个位于顶层的类似目录的实体(桶)。但它可以创建伪目录,就好像底层存储中的目录一样。由于对象存储API不区分文件对象和目录对象,文件系统API对于对象存储是非常低效的。例如,UFS API中删除路径指令并不知道该路径指向的是文件还是目录,必须调用远程查询获取该元数据。由于与远程存储系统通信存在延迟,对象存储之上的元数据操作代价是非常高的。在Alluxio 1.4.0中,UFS API已经更新以更好地处理这样的情况,其依据是在大部分情况下,使得这些调用高效的额外元数据往往已经被Alluxio获取了。
改进底层存储API使Alluxio对对象存储更友好主要有以下两个优势:

  • 优化的对象存储连接器:除文件系统外,改进的适用于对象存储的UFS API显示出显著的性能优势。
  • 简化的对象存储集成:对象存储的新抽象意味着将对象存储集成到Alluxio更容易。不必担心其他对象存储共有的模式,只要在Java客户端为与特定对象存储通信的REST接口实现一个轻量级包装器就足够了。

1.1 优化的对象存储连接器

Alluxio 1.4.0在对象存储上的小文件和小规模读取的性能方面有了重大改进。改进UFS API提升了对象存储中获取元数据的性能。下面的实验数据可以表明了带来的好处:
1.1.1 创建或删除空文件的性能


image

在Alluxio 1.4.0带来的变化中,受到显著影响的操作之一是在底层存储中创建零字节文件。对于写性能,在S3A中提升了5倍,在Ceph中提升了10倍。注意,对Ceph的性能提升更大;Alluxio 1.3.0中针对S3A的优化,即称为ObjectUnderFileSystem的新抽象,现在也适用于所有其他对象存储。另一个受到较大影响的操作是删除,在S3A和Ceph中分别带来了3倍与15倍的性能提升。
1.1.2 粗略计算

一个拥有10Gbps网络链路(约1Gbps用于计算)的数据中心在Alluxio和远程存储集群之间有1ms 的传输时延。在此链路上传输1MB数据块的I / O时间为1MB / 1GBps = 1 ms。在写1MB文件时,create操作中元数据的往返次数将从10减少到1(在Ceph中提升了10倍),执行总时间从11ms(10ms+1ms)减少到2ms(1ms+1ms),获得了超过5倍的性能提升。以此类推,对于10MB的数据块将会得到约两倍的性能提升。以上例子说明了优化元数据性能是如何有效改善小文件和小规模读取性能的。在远程存储集群网络距离非常遥远时,性能提升将变得更加明显。

1.2 简化的对象存储集成

类似于REST接口客户端支持的功能,如今集成新的对象存储仅需要实现少得多的方法。只需要原先实现的方法中的一半即可。在源代码行数方面,现在仅需要不到400行代码即可完成新的对象存储的集成,不到原来的一半。
2.文件系统原生REST接口
新引入的REST接口提供了与Alluxio native Java API的对等性,其目的是促进非Java环境与Alluxio的交互。
REST接口通过名为Alluxio proxy的Alluxio进程实现,该进程使用一个内部Alluxio Java客户端对REST接口和Alluxio服务器之间的通信进行代理。


image

Alluxio proxy的启动方法如下:

  • 在本地通过 . /bin/alluxio-start.sh本地命令,启动本地Alluxio集群
  • 通过 ./bin/alluxio-start.sh all命令启动所有Alluxio master和Alluxio worker进程
  • 显式地调用 ./bin/alluxio-start.sh proxy命令,在本地启动代理进程

2.1 API

REST API由两种类型的端点组成:

host参数可以是运行Alluxio代理的任何机器。
端点path通过路径执行给定的操作(例如,列表状态,创建或删除文件)。其余参数以JSON对象的形式传递到端点。
一些path端点,特别是在创建文件或打开文件时,会创建一个流并返回一个整数句柄id。 此句柄可用于调用流端点以执行给定操作(例如读取,写入或关闭)。
2.2 Examples
本节通过curl命令与本地Alluxio代理进行通信介绍一些REST API的功能。
2.2.1 新建目录
以下命令创建/ hello / world目录; 参数 recursive = true用于递归创建缺少的父目录:

curl -v -H "Content-Type: application/json" -X POST -d '{"recursive":"true"}' http://localhost:39999/api/v1/paths//hello/world/create-directory

2.2.2 列出目录
以下命令列出/ hello目录的内容:

curl -v -X POST http://localhost:39999/api/v1/paths//hello/list-status

2.2.3 删除目录
以下命令删除/ hello目录的内容; recursive = true参数用于递归删除目录:

curl -v -H "Content-Type: application/json" -X POST -d '{"recursive":"true"}' http://localhost:39999/api/v1/paths//hello/delete

2.2.4 上传文件
以下命令创建/hello-world.txt文件,写入内容并将其关闭:

curl -v -X POST http://localhost:39999/api/v1/paths//hello-world.txt/create-file
 1//代理创建一个上传“流”并返回其ID

curl -v -H "Content-Type: application/octet-stream" -X POST -d 'Hello World!' http://localhost:39999/api/v1/streams/1/write
//向文件中写入“hello world”
curl -v -X POST http://localhost:39999/api/v1/streams/1/close
//关闭流

2.2.5 下载文件
以下命令打开/hello-world.txt文件,读取内容并将其关闭:

curl -v -X POST http://localhost:39999/api/v1/paths//hello-world.txt/open-file
2 // //代理创建一个下载“流”并返回其ID

curl -v -X POST http://localhost:39999/api/v1/streams/2/read
Hello World!

curl -v -X POST http://localhost:39999/api/v1/streams/2/close
// 关闭流

2.3 性能
为了获得最佳性能,我们建议将Alluxio代理与Alluxio服务进程放在一起。这可以让非java应用以内存级的速度访问存储在Alluxio中的数据,同时最小化Alluxio代理和Alluxio服务之间额外网络的开销。
3.数据包流
Alluxio 1.4.0引入了一种新的网络传输协议,旨在充分利用Alluxio组件之间的可用网络带宽。为了实现这一点,我们减少了网络传输期间使用的缓存,并且依赖于使用连续流传输协议取代数据传输中的请求-响应协议。
3.1 优势
1.在标准网络中高达2倍的I / O性能改进,以及在高延迟吞吐量产品环境下取得更好的结果
2.最优化少量读取和随机读取,无需调整配置
3.2 协议细节
通过使用这种方法,我们能确保网络管道持续饱和,因为我们不需要发送周期性的额外数据请求。而按照原来的方法,在读取请求的往返时间内,网络管道将处于空闲状态。这将带来显着的I/O性能改进,特别是在往返时间相当长并且可用吞吐量大的情况下。
此外,数据传输的单位已缩减为一个数据包(默认为64KB)。 使用流协议,更小的分组不会影响大规模顺序I/O的工作负载,因为存在恒定数量的setup/teardown消息。 不仅如此,小分组也有利于少量读取,因为读取的数据的总量更接近读取者请求的量。 因此,分组流可以满足两种工作负载类型的客户端,而不需要不同的配置。
数据包流式传输目前仍处于试验阶段,我们将在未来版本中积极改进此功能,以进一步提高Alluxio的性能和易用性。
4.更多内容
该博客只强调了Alluxio 1.4.0中的一些新功能和改进。详细列表,请查看发行说明
您可以按照快速入门指南轻松开始使用Alluxio开源版本社区版本

版权申明:本文由南京大学顾荣等专家翻译整理自Alluxio公司技术博客,由Alluxio公司授权云栖社区及CSDN首发(联合),版权归Alluxio公司所有,未经版权所有者同意请勿转载。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章