在 AWS 上使用 Apache Pin

在 AWS 上使用 Apache Pinot 构建实时分析解决方案

通过 Raj Ramasubbu、Francisco Morillo 和 Ismail Makhlouf 于 2024 年 8 月 6 日发布
在 [高级 (300)](https://aws.amazon.com/blogs/big-data/category/learning- levels/advanced-300/)、、、、、[专家 (400)](https://aws.amazon.com/blogs/big- data/category/learning-levels/expert-400/)、 和 等相关主题上发布

分享

关键要点

  • OLAP 在现代数据驱动应用中至关重要,充当连接原始数据和用户的抽象层,以便有效分析。
  • 传统的 OLAP 数据存储通常用于批处理,而实时 OLAP 解决方案则提供更快的数据访问,使用户能够独立分析数据。
  • Apache Pinot 是一个开源的实时分布式 OLAP 数据存储,专为满足低延迟和高并发的需求而设计。
  • 本文提供了一个在 AWS 上使用 Apache Pinot 和 Tableau 实现近实时分析的分步指南。

现代数据驱动应用中,在线分析处理(OLAP)起着关键作用,它作为连接原始数据与用户的抽象层,以实现高效的分析。OLAP以用户友好的结构组织数据,符合共享的业务定义,确保用户在数据变化时也能轻松分析。这一过程结合来自不同数据源的数据,并将其聚合和分组为业务术语和关键绩效指标(KPI)。简而言之,OLAP是现代应用中以用户为中心的数据分析基础,因为它将技术资产转化为业务友好的术语,使用户能够从数据中提取可操作的洞察。

实时 OLAP

传统的 OLAP数据存储设计用于批处理,以便服务内部业务报告。然而,数据分析的范围正在扩大,越来越多的用户希望自行提取见解。这些用户通常希望直接访问数据并独立分析,而不仅仅依赖于按固定时间间隔提供的计划更新或报告。这导致了实时 OLAP 解决方案的出现,尤其适用于以下用例:

用例描述
用户面分析将分析嵌入消费者使用的产品或应用中,以获取见解,有时称为数据产品。
业务指标提供 KPI、记分卡和与业务相关的基准。
异常检测识别异常值或不寻常的行为模式。
内部仪表盘提供与组织内各方利益相关的分析。
查询根据用户的角色和安全级别提供数据子集,允许他们根据特定需求操作数据。

Apache Pinot 概述

构建实时 OLAP 数据存储所需的能力要求的服务级别协议(SLA)和可扩展性比传统 OLAP 数据存储更严格。因此,需要一个专门的解决方案来满足这些新要求。

是一个开源的实时分布式 OLAP数据存储,旨在满足这些需求,包括低延迟(毫秒级)、高并发(每秒数十万次查询)、近实时数据更新以及处理 PB级数据量。它可以从流式和批量数据源中摄取数据,并将其组织成逻辑表,这些表分布在 Pinot 集群中的多个节点上,从而确保可扩展性。

Pinot 提供与其他现代大数据框架类似的功能,支持 SQL 查询、更新、复杂连接和各种索引选项。

Pinot 在大型企业中经过了大规模测试,服务于超过 ,处理超过 120,000次查询每秒(QPS),每秒摄取超过 150 万个事件,并分析超过 10,000 个业务指标和 50,000 个维度。一个值得注意的用例是用户面 仪表盘,服务于超过 500,000 名用户,提供餐厅表现的即时见解。

Pinot 集群设计为高可用、水平可扩展,并且能够在不影响性能的情况下进行实时配置更改。为此,Pinot被构建为分布式数据存储,以满足上述所有要求,并采用类似 和 的架构设计。

解决方案概述

本文将提供一个逐步指南,展示如何在 亚马逊网络服务 (AWS) 上使用 Apache Pinot 和 亚马逊弹性计算云 (Amazon EC2) 构建实时 OLAP 数据存储,并使用 进行近实时可视化。尽管可以将 Apache Pinot用于批处理用例,但本文将重点关注近实时分析用例。

如果您想在将数据发送到 Pinot 之前进行流处理,可以使用 亚马逊托管的 Flink 服务 (MSF) 进行实时复杂转换,包括分窗、连接多个流以及将流与历史数据连接。您可以将 ,以服务于用户面仪表盘。

删除)

在上述图中,目标是将实时数据摄取到 Pinot 中,进行聚合、更新当前数据模型,并实时为用户和应用程序提供 OLAP 查询,在此情况下,用户面是 Tableau 仪表盘。

数据流如下:

  1. 从实时源中摄取数据,例如来自网站的点击流数据。为了本文的目的,我们将使用 来模拟事件的生成。
  2. 事件被捕获在像 亚马逊托管的 Apache Kafka (MSK) 这样的流存储平台中,供下游使用。
  3. 事件随后被摄取到 Apache Pinot 中的 ,用于处理来自流式源的数据,如 和 。Apache Pinot 由逻辑表组成,这些表分为多个数据段。由于流式数据的时间敏感性,事件被直接写入内存作为 消费段 ,可以视为一个持续摄取新数据的活动表的部分。消费段立即可用于查询处理,从而实现低延迟和高数据新鲜度。
  4. 一旦段达到时间或行数的阈值,它们将被移动到 亚马逊简单存储服务 (Amazon S3),作为 Apache Pinot 集群的深层存储。深层存储是段文件的永久保存位置。批处理所用的段也存储在那里。
  5. 与此并行,Pinot 跟踪集群的元数据并执行保持集群理想状态所需的操作。其主要功能是协调集群资源以及管理集群内部资源与外部数据源之间的连接。底层控制器使用 管理集群状态、故障恢复、分布和可扩展性,并使用 处理分布式协调功能,如领导者选举、锁定、队列管理和状态跟踪。
  6. 为了实现 Pinot 架构的分布式特性, 接受来自客户端的查询,将其转发到服务器,收集结果并返回。代理管理并优化查询,将其分配到服务器,合并结果并返回结果集。代理将请求发送到合适的服务器上的正确段,优化段修剪,并适当地将查询拆分到各服务器。每个查询的结果随后被合并并发送回请求客户端。
  7. 查询结果实时更新在 Tableau 仪表盘中。

为确保高可用性,解决方案为代理和服务器部署 。我们可以使用控制器负载均衡器访问 ,并利用它运行查询和监控 Apache Pinot 集群。

接下来,让我们开始部署此解决方案,并使用 Apache Pinot 和 Tableau 实现近实时可视化。

前提条件

在开始之前,请确保您具备以下前提条件:

  • 部署 Apache Pinot
  • 一个
  • 对 、 和 的基本理解
  • 具有权限的 AWS 身份与访问管理 (IAM) 角色,以访问 并创建数据流实例、EC2 实例和 S3 桶(见 )
  • 以克隆代码库
  • 以安装软件包
  • 使用 Tableau 进行可视化
  • 以可视化数据(对于本文,版本为 2023.3.0)。
  • 使用 按照说明安装 Kinesis 数据生成器 (KDG),将示例网络事务流入 Kinesis 数据流。KDG 使将数据发送到 Kinesis 数据流变得简单。
  • 从以下位置下载 Apache Pinot 驱动程序: * * *
  • 当在 Windows 上使用 Tableau Desktop 时,请将驱动程序复制到 C:\Program Files\Tableau\Drivers 文件夹。对于其他操作系统,请参见 。
  • 确保在以下步骤中,所有 CloudFormation 和 AWS Cloud Development Kit (AWS CDK) 模板在相同 AWS 区域内部署所有资源。

使用 AWS CDK 部署 Apache Pinot 解决方案

AWS CDK 是一个开源项目,您可以使用它来使用熟悉的编程语言定义云基础设施。它使用高层次构造来表示 AWS 组件以简化构建过程。在本文中,我们使用 TypeScript 和 Python 来定义云基础设施。

  1. 首先,引导 AWS CDK。这会设置 AWS CDK 部署到 AWS 账户所需的资源。如果您以前未在部署账户和区域中使用 AWS CDK,则只需执行此步骤。引导命令的格式为 cdk bootstrap aws://<account-id>/<aws-region>

在以下示例中,我在一个虚构的 AWS 账户 ID 为 123456789000us-east-1 北弗吉尼亚区域中运行引导命令:

bash cdk bootstrap aws://123456789000/us-east-1

删除)

  1. 接下来,克隆 GitHub 仓库,并通过从克隆的仓库根目录运行以下命令安装所有依赖项。

bash git clone https://github.com/aws-samples/real-time-analytics-with- apache-pinot-on-aws cd real-time-analytics-with-apache-pinot-on-aws npm i

  1. 运行以下命令,将 AWS CDK 堆栈部署到 AWS Cloud 基础设施,并在提示时输入 y。输入要用于访问 Apache Pinot 控制器和代理的 IP 地址,以 /32 子网掩码格式。

bash cdk deploy --parameters IpAddress="<YOUR-IP-ADDRESS-IN-/32-SUBNET-MASK- FORMAT>"

AWS CDK 堆栈的部署大约需要 10-12 分钟。您应该看到一个堆栈部署消息,显示 AWS 对象的创建,后接部署时间、堆栈 ARN和总时间,类似以下屏幕截图:

![CDK删除)

  1. 现在,可以从 AWS CloudFormation 控制台获取 Apache Pinot 控制器 应用程序负载均衡器 (ALB) 的 DNS 名称。在 Stacks 页面,打开 ApachePinotSolutionStack 堆栈,在 Outputs 选项卡中复制 ControllerDNSUrl 的值。
  2. 启动一个浏览器会话,粘贴 DNS 名称以查看 Apache Pinot 控制器,其内容应类似于以下屏幕截图,其中您将看到:
  3. 控制器、代理、服务器、助手、租户和表的数量
  4. 租户列表
  5. 控制器列表
  6. 代理列表

![Pinot删除)

使用 Tableau 进行近实时可视化

现在我们已经配置了所有 AWS 云资源,我们将向 数据流中流式传输一些示例网络事务,并通过 近实时可视化这些数据。

您可以按照以下步骤打开 Tableau 工作簿以进行可视化:

  1. 下载 到本地计算机,并从 Tableau Desktop 打开该工作簿。
  2. 从 CloudFormation 控制台获取 Apache Pinot 代理的 的 DNS 名称。选择 Stacks ,选择 ApachePinotSolutionStack ,然后选择 Outputs ,复制 BrokerDNSUrl 的值。
  3. 选择编辑连接,并以以下格式输入 URL:

bash jdbc:pinot://<Apache-Pinot-Controller-DNS-Name>?brokers=<Apache-Pinot- Broker-DNS-Name>

  1. 用户名和密码均输入 admin。
  2. 按照 [说明](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html#:~:text=the%20downloaded%20file

Leave a Reply

Required fields are marked *