Grab 是东南亚领先的超级应用,业务涵盖外卖配送、出行服务和数字金融,覆盖东南亚八个国家的 800 多个城市,每天为数百万用户提供一站式服务,包括点餐、购物、寄送包裹、打车、在线支付等。 为了优化 Spark 监控性能,Grab 将其 Spark 可观测平台 Iris 的核心存储迁移至 StarRocks,实现了显著的性能提升。新架构统一了原本分散在 Grafana 和 Superset 的实时与历史数据分析,减少了多平台切换的复杂性。得益于 StarRocks 的高性能查询引擎,复杂分析的响应速度提升 10 倍以上,物化视图和动态分区机制有效降低运维成本。此外,直接从 Kafka 摄取数据简化了数据管道架构,使资源使用效率提升 40%。
作者:
Huong Vuong, Senior Software Engineer, Grab
Hai Nam Cao, Data Platform Engineer, Grab
Iris 是 Grab 开发的定制化 Spark 作业可观测性工具,在作业级别收集和分析指标与元数据,深入洞察 Spark 集群的资源使用、性能和查询模式,提供实时性能指标,解决了传统监控工具仅在 EC2 实例级别提供指标的局限,使用户能按需访问 Spark 性能数据,助力更快决策和更高效的资源管理。
随着业务发展,Iris 暴露出一些问题:
为解决上述问题,Grab 对架构进行重大调整,从 Telegraf/InfluxDB/Grafana(TIG)堆栈转向以 StarRocks 为核心的架构。新架构包括以下关键组件:
(图1. 集成了 StarRocks 的新 Iris 架构)
新架构带来诸多改进:
Iris 可观测性系统主要针对 “集群观测” 场景,涵盖临时使用(团队用户共享预创建集群)和作业执行(每次提交作业创建新集群)两种情况。
针对每个集群,捕获元数据和指标,主要包含集群元数据、集群 Worker 指标、集群 Spark 指标三类表:
利用 StarRocks 的 Routine Load 功能从 Kafka 导入数据,如为集群工作节点指标创建 routine load 作业,持续从指定 Kafka 主题摄取数据并进行 JSON 解析。StarRocks 提供内置工具监控例行加载任务,可通过特定查询查看加载状态。
新的 Iris 系统采用 StarRocks 高效管理实时和历史数据,并通过以下三个关键特性实现:
1.实时数据摄取
2.历史数据存储与分析
3.物化视图优化查询性能
这一架构相比以 InfluxDB 为基础的旧系统有显著提升:
表按日期分区,便于高效裁剪历史数据,查询近期作业或特定时间范围数据时,排除无关分区,减少扫描数据量,加快查询速度。
利用 StarRocks 的动态分区功能,新数据到达时自动创建分区,数据过期时自动删除旧分区,无需人工干预即可维持最佳查询性能。可通过特定 SQL 命令检查表的分区状态,对于超过 30 天的数据,使用每日定时任务备份至 Amazon S3,之后映射到数据湖表,不影响核心可观测性系统性能。
StarRocks 采用多节点数据复制策略,该设计在容错能力和查询性能两方面都至关重要。这一策略支持并行查询执行,从而加快数据检索速度。特别是在前端查询场景中,低延迟对用户体验至关重要。这种方法与其他分布式数据库系统(如 Cassandra、DynamoDB 以及 MySQL 的主从架构)中的最佳实践一致。
使用 Golang 构建,连接 StarRocks 数据库,查询原始表和物化视图数据,负责身份验证和权限管理,保障用户数据访问权限。
提供多个关键界面,如任务运行列表、任务状态、任务元数据等,任务概览页面展示关键摘要信息,帮助用户快速了解 Spark 任务运行和资源利用情况。
(图2:作业总览界面示例)
创建物化视图聚合过去 30 天任务运行数据,包含运行次数、各类资源使用的 p95 值等指标,为分析任务趋势提供数据支持。以下为示例:
CREATE MATERIALIZED VIEW job_run_summaries_001
REFRESH ASYNC EVERY(INTERVAL 1 DAY)
AS
select platform,
job_id,
count(distinct run_id) as count_run,
ceil(percentile_approx(total_instances, 0.95)) as p95_total_instances,
ceil(percentile_approx(worker_instances, 0.95)) as p95_worker_instances,
percentile_approx(job_hour, 0.95) as p95_job_hour,
percentile_approx(machine_hour, 0.95) as p95_machine_hour,
percentile_approx(cpu_hour, 0.95) as p95_cpu_hour,
percentile_approx(worker_gc_hour, 0.95) as p95_worker_gc_hour,
ceil(percentile_approx(driver_cpus, 0.95)) as p95_driver_cpus,
ceil(percentile_approx(worker_cpus, 0.95)) as p95_worker_cpus,
ceil(percentile_approx(driver_memory_gb, 0.95)) as p95_driver_memory_gb,
ceil(percentile_approx(worker_memory_gb, 0.95)) as p95_worker_memory_gb,
percentile_approx(driver_cpu_utilization, 0.95) as p95_driver_cpu_utilization,
percentile_approx(worker_cpu_utilization, 0.95) as p95_worker_cpu_utilization,
percentile_approx(driver_memory_utilization, 0.95) as p95_driver_memory_utilization,
percentile_approx(worker_memory_utilization, 0.95) as p95_worker_memory_utilization,
percentile_approx(total_gb_read, 0.95) as p95_gb_read,
percentile_approx(total_gb_written, 0.95) as p95_gb_written,
percentile_approx(total_memory_gb_spilled, 0.95) as p95_memory_gb_spilled,
percentile_approx(disk_spilled_rate, 0.95) as p95_disk_spilled_rate
from iris.job_runs
where report_date >= current_date - interval 30 day
group by platform, job_id;
基于趋势分析结果构建推荐 API,提供优化建议,如调整资源分配、识别潜在瓶颈或修改调度策略,以优化成本和性能。
我们的 API 生成的推荐结果已集成到 Iris 前端。用户可以在任务概览或详情页面直接查看这些建议,从而获得可执行的优化指导,提升 Spark 任务的效率。
以下是一个示例:如果某个任务的资源利用率长期低于 25%,系统会建议将工作节点的规模缩小一半,以降低成本。
(图3:资源利用率较低的作业示例)
为了让这些洞察更加便捷可用,我们将推荐系统集成到了 SpellVault(Grab 的生成式 AI 平台)应用中。这样,用户可以直接在 Slack 上与推荐系统交互,无需频繁访问 Iris Web 界面,也能随时获取任务性能信息和优化建议。
(图 4. SpellVault 集成示例)
以 StarRocks 为核心开发的 Iris Web 应用,为 Grab 的 Spark 观测能力带来革命性提升,实现作业级别的成本分摊机制。未来,Grab 期待在高级分析和机器学习驱动的洞察方面取得突破,推动数据工程发展。
为提升可读性,本文对技术细节进行了精简,如需查看完整 SQL 示例及实现细节,请参阅原文:https://engineering.grab.com/building-a-spark-observability
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有