《使用Apache Arrow助力构建数据系统.pdf》由会员分享,可在线阅读,更多相关《使用Apache Arrow助力构建数据系统.pdf(37页珍藏版)》请在三个皮匠报告上搜索。
1、DataFunSummit#2023使用Apache Arrow助力构建数据系统李晨曦 炎凰数据 研发工程师01为什么要构建新的数据系统02使用Apache Arrow构建数据系统03什么是Apache Arrow为什么是Apache Arrow04一些Tips目录CONTENTDataFunSummit#202301为什么要构建新的数据系统One Size Fits All Or Not?HTAP流批一体NewSQLOLTP/OLAP批处理/流处理SQL/NoSQLVS数据库的黄金时代https:/dbdb.io/browse?start-min=2020为什么要构建一个新的数据系统?为什么
2、要构建一个新的数据系统?读时建模Schema On ReadSchema on Read读时建模技术在异构日志处理领域的实践为什么要构建一个新的数据系统?支持动态数据表模式的数据查询引擎SELECT*FROM my_eventset为什么要构建一个新的数据系统?支持动态数据表模式的数据查询引擎SELECT _datatype,http.url,http.method,url,method FROM my_eventset为什么要构建一个新的数据系统?支持动态模式的数据查询引擎SELECT_datatype,COALESCE(http.url,url)AS url,COALESCE(http.m
3、ethod,method)AS method FROMmy_eventset数据系统构建分解内存数据格式数据模型类型系统元数据管理内存中过滤、聚合、排序算子查询语言运算表达式持久化索引并发控制存储压缩优化及查询执行API查询计划标量函数时间类型资源管理物化视图优化器关联查询高级分析函数分布式执行子查询外存算子冷热分层算子向量化执行SSE/AVX/NEON数据交换跨平台运行x86/ARM窗口函数DataFunSummit#202302什么是为什么是Apache Arrow第一步内存数据格式数据模型类型系统元数据管理内存中过滤、聚合、排序算子查询语言运算表达式持久化索引并发控制存储压缩优化及查询执
4、行API查询计划标量函数时间类型资源管理物化视图优化器关联查询高级分析函数分布式执行子查询外存算子冷热分层算子向量化执行SSE/AVX/NEON数据交换跨平台运行x86/ARM窗口函数内存数据格式session_idtimestampipRow 114322023/10/23 10:44101.229.90.66Row 215782023/10/22 17:31220.181.108.17Row 315322023/10/23 08:0927.115.41.185Row 413982023/10/22 13:26118.31.77.1Row 114322023/10/23 10:44101.2
5、29.90.66Row 215782023/10/22 17:31220.181.108.17Row 315322023/10/23 08:0927.115.41.185Row 413982023/10/22 13:26118.31.77.1session_id21578timestamp2023/10/23 10:442023/10/22 17:312023/10/23 08:092023/10/22 13:26ip101.229.90.66220.181.108.1727.115.41.185118.31.77.1行式列式内存数据格式:列式存储session_idti
6、mestampipRow 114322023/10/23 10:44101.229.90.66Row 215782023/10/22 17:31220.181.108.17Row 315322023/10/23 08:0927.115.41.185Row 413982023/10/22 13:26118.31.77.1Row 114322023/10/23 10:44101.229.90.66Row 215782023/10/22 17:31220.181.108.17Row 315322023/10/23 08:0927.115.41.185Row 413982023/10/22 13:26
7、118.31.77.1session_id21578timestamp2023/10/23 10:442023/10/22 17:312023/10/23 08:092023/10/22 13:26ip101.229.90.66220.181.108.1727.115.41.185118.31.77.1行式列式 场景OLAP 降低IO、内存开销 数据访问局部性&向量化要继续造轮子么?是什么 高性能列式内存格式标准 支持跨语言跨系统互操作 支持现代硬件 支持高性能传输,零拷贝,无需序列化反序列化复制&转换是什么 高性能列式内存格式标准 支持跨语言跨系统互操作 支持现代硬件
8、支持高性能传输,零拷贝,无需序列化反序列化 完备的生态系统活跃的社区数据系统构建任务内存数据格式数据模型类型系统元数据管理内存中过滤、聚合、排序算子查询语言运算表达式持久化索引并发控制存储压缩优化及查询执行API查询计划标量函数时间类型资源管理物化视图优化器关联查询高级分析函数分布式执行子查询外存算子冷热分层算子向量化执行SSE/AVX/NEON数据交换跨平台运行x86/ARM窗口函数10人年?数据系统构建任务 with Apache Arrow内存数据格式数据模型类型系统元数据管理内存中过滤、聚合、排序算子查询语言运算表达式持久化索引并发控制存储压缩优化及查询执行API查询计划标量函数时间类
9、型资源管理物化视图优化器关联查询高级分析函数分布式执行子查询外存算子冷热分层算子向量化执行SSE/AVX/NEON数据交换跨平台运行x86/ARM窗口函数DataFunSummit#202303使用Apache Arrow构建数据系统使用Apache Arrow构建数据系统数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行数据存储数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源C
10、PU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行 存储模型:事件(Event)Apache Parquet列式存储支持查询下推 Arrow Record BatchSource:Querying Parquet with Millisecond Latency数据存储数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行 存储模型:事件(Event)Apache Parquet列式存储支持查询
11、下推 Arrow Record Batch索引/代码/硬件资源 索引:时间/倒排 代码:UDF 硬件资源:内存/线程/GPU数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行查询:SQL解析 SQL语句-抽象语法树数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行逻辑计划&优化数据存
12、储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行 抽象语法树-逻辑计划 优化Aggregate:MAX(_time)Selection:ip=101.229.90.66TableScan:datasetAggregate:MAX(_time)Selection:ip=101.229.90.66TableScan:dataset,columns:ip,_time,expressions:ip=101.229.90.66物理计划&执行 Acero
13、Apache Arrow提供的C+原生流式查询引擎高可扩展性数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行class ARROW_ACERO_EXPORT ExecNode public:const NodeVector&inputs()const return inputs_;const ExecNode*output()const return output_;const std:shared_ptr&output_schema(
14、)const return output_schema_;virtual Status InputReceived(ExecNode*input,ExecBatch batch)=0;virtual Status InputFinished(ExecNode*input,int total_batches)=0;virtual Status StartProducing()=0;virtual void PauseProducing(ExecNode*output,int32_t counter)=0;virtual void ResumeProducing(ExecNode*output,i
15、nt32_t counter)=0;Status StopProducing();void register_schemaless_sink_node(ExecFactoryRegistry*registry)registry-AddFactory(schemaless_consuming_sink,SchemalessConsumingSinkNode:Make)物理计划&执行 逻辑计划-物理计划数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物
16、化视图执行EventSetScanNodeSelectionNodeAggregateNodeSchemalessSinkNode物理计划&执行 支持动态模式改造数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行class ARROW_ACERO_EXPORT ExecNode public:const NodeVector&inputs()const return inputs_;const ExecNode*output()const
17、 return output_;const std:shared_ptr&output_schema()const return output_schema_;virtual Status InputReceived(ExecNode*input,ExecBatch batch)=0;virtual Status InputFinished(ExecNode*input,int total_batches)=0;virtual Status StartProducing()=0;virtual void PauseProducing(ExecNode*output,int32_t counte
18、r)=0;virtual void ResumeProducing(ExecNode*output,int32_t counter)=0;Status StopProducing();物理计划&执行 扩展算子功能 支持动态模式 支持物化视图数据存储Parquet/CSV/JSON逻辑计划物理计划索引时间/倒排/B树/LSM树代码UDF传输硬件资源CPU/内存/GPU优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行struct Aggregator:public KernelState virtual Status Consume();virtual Status
19、 MergeFrom();virtual Status Finalize();virtual Resultstd:shared_ptr IntermediateSchema();virtual Status ConsumeIntermediate();virtual Resultstd:vector FinalizeIntermediate();传输硬件资源CPU/内存/GPU逻辑计划物理计划数据存储Parquet/CSV/JSON索引时间/倒排/B树/LSM树传输代码UDF优化优化查询SQL/API/DataFrame表达式执行聚合函数排序物化视图执行 Arrow Flight使用 gRPC
20、 或 REST 接口标准化高性能数据交换框架 Arrow Flight SQLDataFunSummit#202304一些Tips踩过的一些坑 更新频繁,开发接口还不够稳定:少魔改,多扩展 复杂类型处理还不够完备:Union、List 需要时间和大规模数据的检验https:/arrow.apache.org/docs/cpp/acero/overview.html#what-is-aceroOne More Thing:内存数据格式数据模型类型系统元数据管理内存中过滤、聚合、排序算子查询语言运算表达式持久化索引并发控制存储压缩优化及查询执行API查询计划标量函数时间类型资源管理物化视图优化器关联查询高级分析函数分布式执行子查询外存算子冷热分层算子向量化执行SSE/AVX/NEON数据交换跨平台运行x86/ARM窗口函数感谢观看