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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 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公司所有,未经版权所有者同意请勿转载。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
8月前
|
编译器 程序员 C++
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
244 0
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
|
7月前
|
SQL 存储 JSON
ClickHouse 23.7 版本发布说明
本文描述了部分特别值得我们重点关注的新功能。但值得注意的是,现在有几个功能已经在生产环境就绪,或处于默认启用的状态。您可以在这篇文章的末尾找到它们。
|
8月前
|
存储 安全 编译器
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(三)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
82 0
|
8月前
|
存储 编译器 C++
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(四)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
218 0
|
8月前
|
存储 安全 编译器
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(一)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
288 0
|
存储 缓存
clickhouse新特性之————MergeTree启动加速(使用篇)
clickhouse新特性之————MergeTree启动加速(使用篇)
869 0
|
存储 SQL JSON
一文读懂 ClickHouse V22.8 新版本重要特性
ClickHouse 又双叒叕发布新版本了。
一文读懂 ClickHouse V22.8 新版本重要特性
|
关系型数据库 数据库 PostgreSQL
PostgreSQL内核扩展之 - ElasticSearch同步插件
背景介绍 Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene、RESTful、分布式、面向云计算设计、实时搜索、全文搜索、稳定、高可靠、可扩展、安装+使用方便。 PostgreSQL 是起源自伯克利大学的开源数据库,历史悠久,内核扩展性极强,用户
24880 1
|
SQL 存储 分布式计算
CarbonData集成 Presto(Trino)(1)- 介绍 & 环境篇
有幸在开源之夏选上课题基于CarbonData 之 Presto 优化课题,这个课题主要是针对Presto使用CarbonData查询上做更多的一些优化。这个课题对于我来说十分有挑战点,涉及大数据领域的组件十分多,首先CarbonData作为大数据的一种文件存储格式,在OLAP计算引擎上的查询加速实现有助于数据更快的查询和产出;其次大数据涉及的组件和版本比较广泛,在测试、兼容各种方面带来的挑战会很多,例如Hadoop、Spark、Presto(Trino)、Hive等多个开源大数据组件的协同运行和调试,给项目的协同运行带来十分多挑战,文章会详细介绍我此次搭建流程
975 0
|
运维 NoSQL Java
Cassandra4.0版本新功能揭秘
8月份的社区线上开发者活动,邀请到的演讲嘉宾蔡一凡老师是Cassandra贡献者之一,其所在公司部署了全球最大的Cassandra集群节点数量。介绍了Cassandra 4.0版本中的新功能:审计日志、零拷贝串流、Netty节点间通信、虚拟表、增量式修复、临时副本等。