AWS 无服务器分析服务 [StabilityAI]
我的一些 AWS 客户使用 Clickhouse,这是一个开源的列式数据库,支持 PB 级别的实时 OLAP 查询,并被成千上万的公司用于包括 AI 和 ML、可观测性、电子商务、金融、游戏、物联网、安全等在内的多种用例。我的客户需要方便地将存储在 Clickhouse 中的 TB 级数据与其他 AWS 服务集成,特别是Amazon Athena、Amazon QuickSight、AWS Glue、Amazon SageMaker 和 Amazon Data Zone。本文讨论了为什么要这样做以及如何使用 AWS 无服务器技术开发一个将 Clickhouse 数据库连接到 AWS Athena 的连接器。
ClickHouseClickhouse 是一个高性能的列式 SQL 数据库,支持 PB 级的实时 OLAP。Clickhouse 提供开源软件包和云服务。OLAP 需要在包含数百万到 万亿 行的大型数据集上实时执行复杂的分析查询。数据通常组织成宽表,包含超过100列,但在回答特定查询时,通常只选择和聚合少数列。列通常很小,比如时间戳、数值和短字符串。查询结果必须在几秒内返回。插入通常以大批量(>1000 行)进行,通常不需要事务支持。
列式数据库比行式数据库更适合OLAP使用场景,因为关系型数据库管理系统只需要读取必要的列,从而最小化磁盘I/O读操作。这一点可通过以下Clickhouse的动画最好地展示。Clickhouse还使用了其他一些性能优化措施,包括数据压缩、内存中的索引、向量化查询执行以及跨服务器集群的CPU核心和磁盘的分布式查询处理。
行导向的 OLAP 数据库 [Clickhouse]
列式 OLAP 数据库 [ Clickhouse ]
Clickhouse 的客户包括 Akamai、阿里巴巴、Bloomberg、Cloudflare、德意志银行、GitLab、InstaCart、LangChain、Lyft、NGINX、Netflix、Spotify、腾讯、Vantage、Vimeo、沃尔玛等。此外,Clickhouse 还可以与 Apache Airflow、Apache Hive、Apache Spark、Amazon MSK、Amazon S3、MinIO、Redis 和 RabbitMQ 等进行集成。最后,在多方面的比较中,Clickhouse 在性能上明显优于 Elasticsearch、Snowflake、Google BigQuery、Amazon Redshift 等数据仓库解决方案。
Amazon的AthenaAmazon Athena 架构(AWS)
Amazon Athena 是一项无服务器分析服务,提供了一种简单且灵活的方式来分析数据,而无需移动数据。Athena 支持标准 SQL,并可以连接到 Amazon S3 及其他超过 30 个数据源。Athena 建立在开源的 Trino 和 Presto 引擎及 Apache Spark 框架之上,并且无需配置或管理操作。Athena 还与包括 QuickSight、Glue、SageMaker 和 Data Zone 在内的其他 AWS 分析服务进行集成。Athena 的客户包括 Atlassian、宝马、可口可乐、ENGIE、FINRA、Georgia-Pacific、西门子等在内的数千家公司。
Amazon Athena ClickHouse 数据连接上述提到的Athena的开源软件(OSS)开源基础以及AWS发布了用于Athena连接器的开源SDK意味着你可以用Java开发自己的连接器,如果还没有现成的。我审查了现有的Athena连接器,虽然JDBC和MySQL的连接器比较接近,但没有一个完全符合Clickhouse的情况。我有几个目标:1/使用Clickhouse的OEM驱动来最大化性能,2/最大化代码复用并符合现有的Athena代码基础,3/最小化客户的部署工作量。
我克隆了Athena查询联邦(AQF)SDK 代码库。接着,我阅读了Athena连接器的指南,并检查了AQF代码,并注意到MySQL连接器的代码可能适用于Clickhouse,因为Clickhouse支持MySQL wire协议。最后,我找到了Clickhouse JDBC驱动程序,并开始了具体的工作。我扩展了几个Java类,比如CompositeHandler、MySqlMetadataHandler、MultiplexingJdbcCompositeHandler和JdbcRecordHandler;我还实现了几个Java接口,比如JdbcMetadataHandlerFactory和JdbcRecordHandlerFactory。
public class ClickHouseCompositeHandler
extends CompositeHandler {}
public class ClickHouseRecordHandler
extends JdbcRecordHandler {}
public class ClickHouseMetadataHandler
extends MySqlMetadataHandler {}
public class ClickHouseMuxCompositeHandler
extends MultiplexingJdbcCompositeHandler {}
public class ClickHouseMuxMetadataHandler
extends MultiplexingJdbcMetadataHandler {}
public class ClickHouseMuxRecordHandler
extends MultiplexingJdbcRecordHandler {}
我编写了多个单元测试来覆盖所有新代码,并重新运行了新 athena-clickhouse 模块以及整个 AQF SDK 的回归测试套件。我按照 MySQL 的示例,创建了一个基于 AWS Serverless 应用模型 (SAM) 的 YAML 格式 CloudFormation 脚本,该脚本部署了一个 Lambda 函数,该函数在必要时将 Athena 的 SQL 命令委托给底层的 Clickhouse 数据库。
亚马逊 Athena 联邦查询引擎架构 AWS
我创建了一个S3桶来存储JAR二进制文件,并作为Athena查询结果的暂存区域。我还在我托管Clickhouse数据库的VPC中创建了AWS S3和AWS Secrets Manager的这些VPC终端节点,这样我的VPC托管的Lambda函数就能访问这些AWS服务。最后,我使用_sam_脚本进行部署,部署了新的Athena Clickhouse连接器,该连接器包括_Lambda_函数、_JAR_二进制文件和_IAM_角色三部分,然后在已安装在Amazon EC2实例上的Clickhouse数据库服务器上进行了测试验证,该服务器上已加载了基准数据。
注意,你必须为你的特定环境的网络和安全要求配置 SAM 部署参数。你必须设置 S3(以及可选的 Secrets Manager,如果需要使用它来存储凭证)的 VPC 终端节点。更多部署详情请参见 athena-clickhouse 代码库。
git clone https://github.com/bishrtabbaa/athena-clickhouse
cd athena-clickhouse
curl --location -O https://github.com/awslabs/aws-athena-query-federation/releases/download/v2024.25.1/athena-clickhouse-2024.25.1.jar
aws s3 cp --region us-east-2 athena-clickhouse-2024.25.1.jar s3://my-bishrtabbaa-athena-demo/code/ # 将jar文件上传到S3指定位置
sam validate --region us-east-2 --template-file athena-clickhouse.yaml # 验证模板文件是否符合要求
sam deploy --guided --region us-east-2 --template-file athena-clickhouse.yaml --stack-name AthenaClickhouseConnectorStack --capabilities CAPABILITY_NAMED_IAM --parameter-overrides LambdaFunctionName=athenaclickhouseconnectorfunction DefaultConnectionString='clickhouse://jdbc:clickhouse:https://myclickhouseserver.xyzware.io:8443/default?user=foo&password=bar&sslmode=none' DisableSpillEncryption=true SecretNamePrefix=AthenaClickhouse SpillBucket=my-bishrtabbaa-athena-demo SpillPrefix=athena-spill SecurityGroupIds=sg-26b5a34e SubnetIds=subnet-15ce057d,subnet-86cec2fd LambdaS3CodeUriBucket=my-bishrtabbaa-athena-demo LambdaS3CodeUriKey=code/athena-clickhouse-2024.25.1.jar # 使用指定参数部署Lambda函数和相关的资源
令我高兴的是,从功能正确性、性能和安全性方面来看,一切运行良好,我非常激动地与 AWS 开源社区分享这个新的大数据连接组件。代码已经过审查、批准,并合并到了官方的 Athena 联合查询系统 repo 中。
最后来个总结Clickhouse 是 Amazon Athena 以及您的其他 AWS 工作负载的自然大数据来源。您可以使用此无服务器部署包工具将 Clickhouse 与其他 AWS 服务集成。期待来自 AWS、大数据领域和开源社区的反馈。
参考资料共同学习,写下你的评论
评论加载中...
作者其他优质文章