写点什么

DataWorks 又又又升级了,这次我们通过 Arrow 列存格式让数据同步速度提升 10 倍!

  • 2025-12-23
    浙江
  • 本文字数:2636 字

    阅读完需:约 9 分钟

引言

在大数据时代,数据集成作为企业数据流转的核心枢纽,承担着异构数据源之间高效同步的重要职责。随着数据量的爆炸式增长,传统的行存同步方式在面对大规模列存数据处理时,逐渐显露出性能瓶颈。


为解决这一挑战,,DataWorks 数据集成推出基于 Apache Arrow 列存格式的高性能同步能力,实现从“行式传输”到“列式直通”的技术跃迁。通过引入零拷贝、列式内存标准 Apache Arrow,DataWorks 实现了跨数据源的列存到列存高效同步,性能提升最高达 10 倍以上,助力企业实现数据流转的“高速通道”。

技术创新:基于 Arrow 的列存同步方案

Apache Arrow:下一代数据处理的“通用语言”

Apache Arrow 是一项由 Apache 基金会主导的跨语言、高性能列式内存数据标准,被广泛应用于大数据生态(如 Spark、Flink、Presto 等)。核心优势在于:

  • 零序列化/反序列化:数据以内存二进制块直接传输,避免格式转换开销

  • 零拷贝(Zero-Copy):跨进程/跨系统共享内存,极大降低 CPU 与内存消耗

  • CPU 缓存友好:列式存储提升缓存命中率,优化计算效率

  • 统一类型系统:支持复杂嵌套结构,保障跨平台类型兼容性


简单来说:Arrow 让数据“原样流动”,不再“反复翻译”。

传统架构 vs Arrow 架构:从“搬砖”到“高速专列”

当前大多数数据集成工具仍基于“行存驱动”设计:

  • Reader 读取列存文件 → 解码成单行 Record 对象;

  • 框架传递 Record → Writer 再将其编码回目标列存格式。


这一过程存在严重性能浪费:

  • 多次类型转换与对象创建(如 String → BigDecimal)

  • 高频 GC 压力导致频繁 Stop-The-World

  • 内存带宽利用率低下


而 Arrow 则彻底改变了这一流程:Reader 直接输出列式 Batch → Writer 直接消费列式 Batch,中间无需任何转换,真正实现“端到端列式流水线”。

传统行存同步架构:

面向单行行存的格式设计,每一个 Record 对象定义了若干个 Column,每个 Column 包含当前行对应该列的列值 Value。以 MaxCompute(ODPS)列存数据同步到 MaxCompute(ODPS)列存为例:


MaxCompute 表数据可能以 ORC、Parquet 等列存格式存储的数据,同步核心流程分为:

  1. 通过 MaxCompute Tunnel 将数据按行读取出来,并转为 MaxCompute Record 对象;

  2. MaxCompute Reader 将 MaxCompute Record 转换为同步引擎的 Record 对象,投递给框架;

  3. 框架收到 Record 放入缓存队列;

  4. Writer 从框架接收引擎 Record,再转换为 MaxCompute Record,并通过 Tunnel client 将数据进行序列化后通过网络传输给 Tunnel server。

数据集成 Arrow 列存同步架构:

当列存到列存同步场景下,将列存先转为行存格式,再将行存格式转为列存格式,中间多了不必要的转换及序列化操作。通过构建全新的 ArrowTabularRecord 数据结构,DataWorks 实现了对 Arrow 列式数据的原生支持,跳过行式转换环节,实现端到端列存“短路同步”,大幅提升吞吐、降低延迟。


同步引擎基于新的面向 Arrow 列存格式的 ArrowTabularRecord,列存到列存数据流转如下:


同步核心流程如下:

  1. 通过 MaxCompute Tunnel Arrow API 将数据直接按照 Arrow 列存格式读取出来,并存入 ArrowTabularRecord,投递给框架;

  2. 框架收到 Record 放入缓存队列;

  3. Writer 从框架收到引擎 ArrowTabularRecord,直接通过 Tunnel Arrow API 将数据基于 Arrow 格式,省去做序列化的开销,直接将内存二进制数据传输给 Tunnel Server。

核心能力:全链路列式加速,支持主流数据源

DataWorks 数据集成现已全面支持 MaxCompute、Hologres、Hive/OSS/HDFS(Parquet/ORC) 等主流列存数据源的 Arrow 读写能力,用户仅需在任务配置中添加 "useArrow": true 即可一键启用。

列存直读直写,显著提升性能

示例:Hive ORC → MaxCompute 写入,原需数小时的任务,现可在数十分钟内完成。

性能压测报告

我们对多个典型场景进行了端到端性能测试,同步性能显著提升,可实现从小时级到分钟级的数据同步周期提升:

场景一:MaxCompute 列存短路同步(Arrow → Arrow)

场景二:Hologres → MaxCompute 同步

场景三:Parquet/ORC → MaxCompute 同步

备注:Parquet、ORC 文件可以在 HDFS、OSS 等分布式文件系统中

核心优势:不止于快,更稳、更低成本

典型应用场景:释放数据流转的无限可能

场景一:大数据搬站迁移

痛点:从 Hive 向 MaxCompute 迁移数百 TB 数据,耗时较久,影响业务上线

方案:启用 Arrow 同步,列存直传,避免格式转换

成果:迁移时间从小时级同步缩短至分钟级,效率提升 10 倍以上

场景二:异构数据源融合与湖仓一体化

支持 Hive(湖)与 Hologres/MaxCompute(仓)之间的列存高效互通,为数据湖仓一体架构提供核心数据流转引擎,实现“一数多用、湖仓协同”。

如何使用?一步开启 Arrow 加速

整库解决方案

数据集成已经发布 Hive->MaxCompute 整库同步功能,默认会自动根据同步字段类型,渲染开启 Arrow 高性能同步能力。


💡 无需代码改造,无需理解底层细节,一键开启高性能同步

单表离线同步

DataWorks 数据集成单表离线任务,在 reader 和 writer parameter 下添加 useArrow: true 参数,即可开启列式加速(由于是列存格式直读直写,开启前提是需要保证源端和目标端列类型保持一致):

{  "type": "job",  "steps": [    {      "stepType": "hive",      "parameter": {        "useArrow": true,        "datasource": "my_datasource",        "column": [          "col1",          "col2"        ],        "readMode": "hdfs",        "table": "table"      },      "name": "Reader",      "category": "reader"    },    {      "stepType": "odps",      "parameter": {        "useArrow": true,        "truncate": false,        "datasource": "odps_test",        "column": [          "col1",          "col2"        ],        "table": "table"      },      "name": "Writer",      "category": "writer"    }  ],  "setting": {    "speed": {      "concurrent": 3    }  }}
复制代码

未来演进:构建更强大的数据同步生态

DataWorks 将持续深化 Arrow 能力,打造企业级高性能数据流转平台:

  • 更多数据源支持:扩展至 HDFS、Paimon、ClickHouse、Iceberg 等;

  • 智能调度优化:根据数据特征自动选择 Arrow 或行式模式;

  • 生态融合:为 DataWorks 数据搬站,提供端到端数据解决方案

结语:让数据真正高性能“跑”起来

DataWorks 数据集成引入 Apache Arrow 列存同步能力,列式、零拷贝、内存级传输为同步性能带来显著提升。DataWorks 数据集成正以技术创新为引擎,帮助企业打破数据孤岛、消除性能瓶颈,让数据在湖仓之间、系统之间、业务之间高速、稳定、低成本流动。

用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
DataWorks 又又又升级了,这次我们通过 Arrow 列存格式让数据同步速度提升10倍!_大数据_阿里云大数据AI技术_InfoQ写作社区