AWS系列之Glue
概述官网AWS推出的一项无服务器的数据集成服务旨在帮助用户轻松发现、准备、移动和集成来自多个来源的数据。支持分析、机器学习和应用程序开发提供强大的工具来编写、运行任务以及实施业务工作流程。核心功能包括数据发现、现代ETL、数据清理和集中式数据编目。支持 ETL、ELT 和流式传输 等多种工作负载并与AWS分析服务如S3、Athena和Redshift Spectrum无缝集成。支持按需扩展、所有数据类型和架构变化。用户仅需为实际使用的资源付费。彻底免除用户对底层基础设施的管理负担用户只需提交ETL作业Glue会自动完成资源调度、启动与执行等一系列操作。功能亮点数据发现与编目通过爬网程序自动推断数据架构并将其集成到AWS Glue数据目录中支持跨多个数据存储的统一搜索数据转换与清理提供基于图形界面的任务编辑器支持通过简单的任务计划构建复杂的ETL管道并利用内置机器学习功能去除重复数据数据管道构建与监控支持基于事件的触发器自动处理任务动态扩展资源并通过AWS CloudTrail和Spark UI进行监控设计理念提供自定义能力当系统本身不能完全满足用户需求时允许用户通过编写代码自定义ETL流程灵活应对各种场景适配多样的分析环境不强制用户使用统一的数据模型、类型系统或查询语言而是允许用户从已有数据结构出发逐步迁移或扩展新的应用和用例最小化基础设施管理负担通过无服务器架构最大限度减少开发者在资源管理上的投入提升整体生产效率100多种不同的数据来源使用场景将数据加载到数据仓库从本地数据库迁移到S3流式数据摄取与处理版本1.0基于集群的执行方式面向批处理场景采用集群启动模型支持三种作业启动方式重用已有的预分配集群从服务级预热池中分配集群从EC2实例新建集群冷启动作业必须在整个集群准备就绪后才能开始执行。为控制成本空闲集群会在设定时间后被回收。热启动方式1和2通常在1分钟内启动冷启动方式3则可能延迟810分钟。Glue 1.0的启动时延差异较大体验不稳定。2.0秒级启动的新架构2020年发布引入新的资源管理器和轻量级Spark应用框架极大缩短作业启动时间。作业只需等待第一个执行节点启动即可开始执行Spark调度器被修改为直接使用Glue的资源管理器管理的Worker而不再依赖传统YARN之类的集群系统资源管理器维护一套服务级别的Spark实例“热池”并利用机器学习模型预测不同地区的EC2资源需求从而将冷启动时间控制在10秒以内。Glue 3.0自动扩缩容的进化在2.0的基础上进一步升级支持作业运行过程中动态调整集群大小实现真正的弹性执行。核心创新包括增强Spark的Shuffle跟踪算法即使在缩容时也能安全保留中间数据避免丢失优化资源弹性策略避免过于频繁的扩缩容减少资源抖动与调度开销。原理架构示意图Glue ETL栈的核心组件Glue Studio可视化界面用户可通过拖拽操作构建数据处理流程系统会自动生成可读性强的Apache Spark脚本极大降低ETL开发的门槛。支持运行、监控数据集成任务Glue ETL运行时Runtime包括Spark的核心组件和Glue自研的扩展库。AWS选择Spark作为底层引擎是因为其通用性强且在开发者中应用广泛。进一步扩展专属的ETL库提供更高效、鲁棒的处理能力尤其适合处理嵌套的半结构化数据如JSON、日志等。其中引入的DynamicFrame数据结构以及一系列专门用于清洗、转换嵌套数据的操作使得复杂数据的处理更加简洁高效任务编排系统提供作业编排能力可将多个ETL任务串联成完整的数据处理流水线实现自动化执行与调度无服务器Spark作业执行用户提交Spark脚本Glue会自动处理资源配置、调度、启动等一系列操作。作业通常可在几秒内启动并根据任务负载动态伸缩资源实现真正的弹性计算。Glue Data Catalog数据目录可扩展的元数据服务允许用户将数据集建模为数据库和数据表支持对多种存储系统中的数据进行建模Amazon S3对象存储各类关系型数据库NoSQL存储流数据服务如Kinesis通过Glue数据目录定义的数据表可被包括Athena、EMR和Redshift在内的AWS分析服务直接查询。还提供兼容Apache Hive Metastore的适配器方便用户将其与开源分析引擎如Apache Spark和Presto集成使用。Glue Studio用户可通过图形化方式构建ETL流程系统将其转换为一个有向无环图DAG表示的ETL脚本每个节点代表一个数据源、数据汇或数据转换操作。低代码与灵活性可通过拖拽操作快速搭建工作流可对每个节点进行个性化配置或直接编辑生成的底层Spark脚本以满足更复杂的业务逻辑需求。DynamicFrame在处理JSON这类半结构化数据时传统工具要求提前知道字段结构schema。AWS Glue引入DynamicFrame不需要提前定义字段结构每条数据记录都带有自己的字段信息只有需要时才整体推断Schema特别适合清洗格式不统一的“脏数据”。可用DynamicFrame来读取CSV、JSON、Parquet等格式的数据也能处理数据库里的数据。处理完后若需做复杂分析可再转成Spark DataFrame。Spark Shuffle在使用Apache Spark时Shuffle过程常常是性能瓶颈特别是在处理大规模数据或分区倾斜严重的任务中。传统情况下Shuffle数据被存储在本地磁盘。如果某个Worker的磁盘空间不足或分区分布不均就可能导致任务失败或性能严重下降。两种常见解决方法重新分区Repartition以缓解倾斜增加本地资源如磁盘或节点数量。但这两种方式都带来更高的维护成本或资源浪费。为解决这个问题AWS在2021年推出Cloud Shuffle Storage Plugin云端Shuffle存储插件。核心思想将Shuffle数据存储在Amazon S3上而不是本地磁盘从而实现计算与存储的彻底解耦。好处消除本地存储瓶颈支持更高的并发与弹性计算降低节点故障对任务的影响。为支持这项功能AWS 扩展 Spark 内部的多个组件Block Manager块管理器Shuffle Reader/Writer读写器Task I/O 层等在 2022 年Glue 团队进一步扩展插件能力使其支持其他云存储服务不再局限于 S3。这也为多云部署或混合云环境下使用 Spark 提供更大灵活性。2021年Glue引入原生SIMD矢量化读取器以解决ETL工作负载中的CPU瓶颈问题将CSV和JSON等原始格式转换为Apache Parquet等现代格式。传统的反序列化到内存受到CPU和内存带宽的限制落后于S3改进的网络速度。该解决方案涉及用C重新实现读取器并利用SIMD矢量化CPU指令从而实现微并行从而实现更快的解析、标记和索引。读取器基于Apache Arrow将数据以内存列式格式存储这有助于优化内存带宽利用率并降低写入Parquet等列式格式时的转换成本。AWS在Glue中构建一个编排层允许客户编排数据管道这被称为工作流。允许客户从Glue爬虫、Glue Spark作业或Glue Python作业构建管道。他们可定义在作业之间传递的参数、发生故障时的后备作业或根据计划或事件组合启动工作流的触发器。用户可监控整个工作流也可深入每个作业进行故障排除。Glue ETL库中的Glue作业书签通过跟踪和保留作业运行状态来实现增量数据处理。启用书签后作业可从中断处继续执行跳过之前处理的数据并支持CSV、JSON、Parquet、ORC、Avro和JDBC源等格式。对于较大的初始加载数百万个S3前缀的文件可能会让Spark工作器不堪重负Glue会限制每次作业运行的文件数量或数据集大小从而允许多次执行才能完成任务可确保可靠的大规模数据迁移。AWS扩展Glue对数据格式、源和接收器的支持以满足多样化的客户需求包括传统格式和独特格式。该团队致力于优化Amazon S3和Redshift等大容量数据源的性能和可靠性并增加支持的数据源和格式的多样性。对于AmazonS3Glue最初支持CSV、JSON、Parquet和ORC等标准格式。后来引入任务批处理和分区修剪等优化功能还增强处理S3存储类和细粒度访问控制等功能。2022年Glue增加对Apache Hudi、Iceberg和Delta Lake 等事务表格式的原生支持。总结ETL 是长尾问题数据格式、场景千差万别必须留出可编程能力基础设施优化带来复利比如启动时间降低 → 支持交互式应用 → 用户群扩大连接器生态决定 Glue 的生命力多源、多格式、Marketplace 插件体系让 Glue 不断成长。