各位的社区小伙伴们大家好,我们很高兴的宣布,ByConity 0.2.0 版本正式发布了,这个版本提供多项有用的新特性,同时修复了若干已知的问题,进一步提升了系统的性能和稳定性。
重要新特性:
-
冷读优化,包括 IOScheduler 和 Preload 能力
-
数据湖支持,包括 Hive,Hudi,Multi-Catalog 等支持
-
ELT 长时任务支持,包括异步执行,队列,算子 Spill 等
-
RBAC
欢迎大家使用体验,期待听到大家的反馈和建议。
由于 ByConity 的存算分离架构,对远端存储的冷读相比本地磁盘有一定的性能差距,在 0.2.0 版本专门针对冷读进行了性能优化,主要手段有:
IOScheduler
为了减少单个请求端到端的耗时,提升节点的吞吐,同时降低一定时间范围外的查询的数量。我们引入 IOScheduler 对远端数据进行读取,能达到如下目标:
- 减少 IO 请求的数量并降低节点带宽的使用;
- 在慢 IO 比例一定的情况下,减少 IO 数量能减少查询受到慢 IO 影响的可能性;
- 对大 IO 的切分与并行执行,减少大 IO 的耗时;
- 支持 Prefetch 允许将数据预取回来,减少查询端到端的耗时;
- 对 S3 的冷读相比于上一个版本有 3 倍的提升。
Preload
支持主动将远端存储数据预拉取到 Disk Cache 中。支持:
自动 ****Preload:当表发生 insert、merge 后会自动把更新后的数据拉取到本地,可通过配置项开启;
手动 ****Preload:使用 ALTER 语句手动 Preload 特定范围的数据。
Hive 表引擎
从 0.2.0 版本开始,ByConity 可以通过建立外表的形式访问 Hive 数据,创建 Hive 外表时, ByConity 会获取并解析 Hive table 元数据,自动推断表的结构(列名,类型,分区),并通过 Hive 引擎读取 Parquet 以及 ORC 格式的 Hive 数据,同时支持将 Hive 的统计信息集成到 ByConity 的优化器。该版本同时支持 HDFS 和 S3 存储。
Hudi 表引擎
该版本实现 Hudi 两种类型表的支持:Copy On Write 表和 Merge On Read 表。ByConity 实现了对 Hudi CoW 表的进行快照查询。在开启 JNI Reader 后可以支持 MoR 表的读取。ByConity 引入 JNI 模块来调用 Hudi Java 客户端读取数据。并且通过 Arrow 实现内存数据在 Java 与 C++之间的交换。
Multi-Catalog
为了更方便地连接到多个外部数据目录,以增强 ByConity 的数据湖分析和外表查询功能,ByConity 引入 Multi-Calalog 能力,允许用户在同一个 Hive 实例中同时连接多个不同的存储和元数据服务,而不必为每个存储创建单独的 Hive 实例。这简化了数据管理和查询的复杂性,使组织能够更好地管理和利用其多样化的数据资源。目前已经支持的外部 Catalog 有:Hive,Hudi,AWS Glue。
谈到数据仓库, 一定离不开使用 Extract-Transform-Load (ETL)或 Extract-Load-Transform (ELT)。 将来源不同、格式各异的数据提取到数据仓库中,并进行处理加工。ByConity 从该版本开始支持 Extract-Load-Transform (ELT)的能力,从而使用户免于维护多套异构系统。具体而言,用户可以将数据导入后,通过自定义的 SQL 语句,在 ByConity 内部进行数据转换,而无需依赖独立的 ETL 系统及资源。
该版本支持 ELT 中的第一阶段的基本能力,包括异步执行,队列,基于磁盘的 Shuffle
异步执行
面对查询量大、耗时长的任务时,同步执行的方式需要客户端等待服务端返回,容易出现连接超时、影响后续任务执行等问题,在长时任务中,用户不太关心请求的相应时间,只期望能在特定时间内完成,并对可靠性等要求较高,支持长时任务的异步执行,是支持混合负载的开端。
队列
离线加工面对大量请求时,当系统超载,需要一定的排队机制使 query 请求挂起,等待集群释放资源后再进行调度。
基于磁盘的 Shuffle
当前的 exchange 会在所有 segment 下发执行后进行注册动作。Stage by stage execution 要求上下游 stage 分别执行。exchange 当前的实现不满足要求。应实现基于磁盘的 shuffle 功能,在上游 task 运行完毕后,下游 task 仍然能够获取分区输入数据。
该版本支持 RBAC 基本能力,其用法与 ClickHouse 一致,包括用户管理,角色管理,权限管理等。实现方面由于 ByConity 存算分离的架构特性,采用统一元数据的方式实现,RBAC 信息统一存放在 ByConity 的 Metastore 当中,并且为了性能,由 Server 在镜像 RBAC 信息并广播所有更改。
修复了 ByConity 0.1.0 版本中若干已知问题,进一步提高了系统的稳定性。完整的问题列表可以看这里:
https://github.com/ByConity/ByConity/releases
从 0.1.0 至今,我们收到很多社区开发者的测试反馈和代码贡献,在此向所有参与 0.2.0 测试和反馈的开发者表示感谢(排名不分先后,均为 GitHub ID):
juppylm, luffyhwl,Alima777,fky2015,AdityaC4,gaodayue,zeromem,SYaoJun,JackyWoo,fancyqlx,xiaomo728,hillbun,tianyouyangying,skyoct,xingcici,FourSpaces,inewzone,xiaohu-zhang
欢迎加入社区,与我们共建