Apache DataFu 介绍与选型指南
Apache DataFu 认知篇选型指南:多组件版本基准(Spark 2.1.0/Pig 1.6.1/Hourglass 1.6.1)、三组件分工与去重/倾斜 join 等特性、官方示例快速上手及 Pig UDF/Spark 工具库对比。
Apache DataFu 介绍与选型指南
目标:本文为 Apache DataFu 的认知篇选型指南,介绍其组件版本基准、核心概念、功能特性与 Pig UDF/Spark 工具库同类对比。本文不做本地安装实测,全部关键论断均基于 Apache DataFu 官网、Maven Central 与 GitHub 联网查证,查询日期为 2026-10-18。
一、信息基准
- 查询日期:2026-10-18。
- 版本依据:Apache DataFu 为多组件项目,官方下载页明示「datafu-pig 与 datafu-hourglass 的最新版本与 datafu-spark 的最新版本并不相同」,故本文标题不带统一版本号,按官方渠道实查的组件版本基准如下(查询日期 2026-10-18):
| 组件 | 最新版本(实查渠道) | 备注 |
|---|---|---|
| 源码发行包 | apache-datafu-2.1.0 | 官方 Download 页当前发行;GitHub tag 更新时间 2025-04-08(tags.atom) |
| datafu-spark | 2.1.0(Scala 2.12:datafu-spark_2.12,Apache Maven 仓库) | 官方 Javadoc 目录为 /docs/spark/2.1.0/ |
| datafu-pig | 1.6.1(Maven Central org.apache.datafu:datafu-pig) | 官方 Javadoc 目录为 /docs/datafu/1.6.1/ |
| datafu-hourglass | 1.6.1(官方 Javadoc 目录 /docs/hourglass/1.6.1/) | 增量 MapReduce 框架 |
- 官方来源清单:
- 官网首页(三组件定位):https://datafu.apache.org/
- Download 页(版本基准与依赖坐标):https://datafu.apache.org/docs/download.html
- DataFu Spark Getting Started(含兼容矩阵与示例):https://datafu.apache.org/docs/spark/getting-started.html
- DataFu Spark Guide:https://datafu.apache.org/docs/spark/guide.html
- Apache Maven 仓库:https://repository.apache.org/content/groups/public/org/apache/datafu
- GitHub 仓库:https://github.com/apache/datafu
二、软件概述
Apache DataFu(Apache License 2.0,ASF 顶级项目官网)是面向 Hadoop 大规模数据处理的工具库集合,官方首页定义其由三个库组成(来源:datafu.apache.org/,2026-10-18 查询):
- Apache DataFu Spark:面向 Apache Spark 的工具函数与 UDF 集合,源自 PayPal 内部项目、2019 年开源,自 2017 年起在 PayPal 生产工作流中使用;
- Apache DataFu Pig:面向 Apache Pig 的 UDF 与宏集合,2010 年开源、2013 年 9 月达 1.0,曾长期在 LinkedIn 生产使用;
- Apache DataFu Hourglass:基于 Hadoop MapReduce 的增量处理框架,面向滑动窗口类重复计算,官方称可将计算资源消耗降低 50-95%。
三、核心架构与核心概念
3.1 三组件分工
| 组件 | 宿主平台 | 形态 | 典型定位 |
|---|---|---|---|
| datafu-spark | Apache Spark | Scala UDF/DataFrame 扩展方法与聚合器 | 去重、倾斜 join、范围 join 等常见数仓操作的工具化 |
| datafu-pig | Apache Pig | Pig UDF 与宏 | 数据挖掘与统计类算子(采样、哈希、会话化等) |
| datafu-hourglass | Hadoop MapReduce | 增量处理框架 | 按天/周定期重算的滑动窗口作业增量复用 |
(来源:datafu.apache.org/ 首页三组件描述,2026-10-18 查询。)
3.2 DataFu Spark 的扩展点
DataFu Spark 通过两种方式暴露能力:一是 DataFrameOps 等隐式类为 DataFrame 增加扩展方法(如 dedupWithOrder),二是聚合器类 UDAF(如 count distinct up to);同时支持在 Spark Scala 中调用 Python 代码、或在 PySpark 中调用 Scala 代码的桥接工具(来源:datafu.apache.org/docs/spark/getting-started.html Examples 列表,2026-10-18 查询)。
3.3 Hourglass 的增量思想
Hourglass 针对按日切片重算的滑动窗口作业:将前序已算出的中间结果与新增一天的数据合并计算,避免全量重算,这是其资源节省的来源(来源:官网首页 Hourglass 段落与官方论文链接,2026-10-18 查询)。
四、功能特性
- DataFrame 去重族:
dedupWithOrder(按 key 与排序取最新一条)、dedupWithCombiner(用 UDAF 做 map 端聚合的同功能变体)、dedupTopN(每个 key 保留多条)(来源:spark/getting-started.html,2026-10-18 查询)。 - 特殊 join:倾斜 join(小表仍大到无法放入内存时的 broadcast 优化变体)与数值/区间 join(来源:spark/getting-started.html Examples,2026-10-18 查询)。
- 近似计数:
count distinct up to聚合器,仅需验证最小去重行数时的高效实现(来源:同上,2026-10-18 查询)。 - 跨语言桥接:Spark Scala 调 Python、PySpark 调 Scala(来源:同上,2026-10-18 查询)。
- 全部 UDF 单元测试保障:官方对三个库均声明代码经过单元测试(来源:官网首页各组件段落,2026-10-18 查询)。
- 官方兼容矩阵(datafu-spark,来源:spark/getting-started.html Compatibility Matrix,2026-10-18 查询):
| DataFu Spark | Spark |
|---|---|
| 1.8.0 | 2.2.3、2.3.3、2.4.4–2.4.5 |
| 2.0.0 | 3.0.x–3.1.x |
| 2.1.0 | 3.0.x–3.4.2 |
五、快速上手
以下均引自官方文档(来源标注于各段),本文未本地运行。
依赖引入(官方 Download 页原文,Maven):
<dependency>
<groupId>org.apache.datafu</groupId>
<artifactId>datafu-spark</artifactId>
<version>2.1.0</version>
</dependency>
(Gradle 写法 compile "org.apache.datafu:datafu-spark:2.1.0"、SBT 写法 libraryDependencies += "org.apache.datafu" %% "datafu-spark" % "2.1.0" intransitive 同见该页。)
官方 Getting Started 的基础示例:将 jar 加入 Spark classpath 后导入 DataFrameOps,对同一客户存在多行更新记录的 customers 表取每个客户的最新记录(来源:https://datafu.apache.org/docs/spark/getting-started.html Basic Example 节):
import datafu.spark.DataFrameOps._
val customers = spark.read.format("csv").option("header", "true").load("customers.csv")
csv.dedupWithOrder($"id", $"date_updated".desc).show
官方同时说明还有 dedupWithCombiner(map 端聚合变体)与 dedupTopN(每 key 保留多条)两个变体(来源:同页 Next 段落)。
六、适用场景与限制
6.1 适用场景
- Spark 数仓通用算子补齐:最新记录去重、倾斜 join、区间 join 等高频但有实现门槛的 DataFrame 操作。
- 存量 Pig 作业治理:以经过测试的 DataFu Pig UDF/宏替换自研 UDF。
- 天级滑动窗口报表:MapReduce 体系内用 Hourglass 做增量重算降本。
6.2 限制与注意
- 组件版本割裂:spark 2.1.0 与 pig/hourglass 1.6.1 并行,升级需分别核对(来源:download.html,2026-10-18 查询)。
- Spark 版本窗口:datafu-spark 2.1.0 官方测试覆盖 Spark 3.0.x–3.4.2,更新的 Spark 3.5/4.x 未在官方矩阵中声明(来源:getting-started.html,2026-10-18 查询)。
- Hourglass 绑定 MapReduce 体系:面向仍运行 MapReduce 的 Hadoop 集群,Spark 体系项目收益有限。
- 发布节奏平缓:最近源码发行 tag 为 2025-04-08(GitHub tags.atom,2026-10-18 查询)。
七、同类选型对比
| 方案 | 许可证 | 社区活跃度(2026-10-18 查询) | 版本节奏 | 兼容矩阵 |
|---|---|---|---|---|
| Apache DataFu(DataFu Spark 2.1.0) | Apache-2.0(ASF) | GitHub apache/datafu 124 stars(shields.io) | 源码发行 2.1.0(tag 2025-04-08) | Spark 3.0.x–3.4.2(官方矩阵) |
| PiggyBank(Apache Pig 自带 UDF 贡献库) | Apache-2.0(ASF) | 随 Apache Pig 主项目维护 | 无独立版本号,随 Pig 发行 | 与 Pig 版本配套 |
| spark-daria(mrpowers-io/spark-daria) | Apache-2.0 | GitHub 766 stars(shields.io) | Maven Central 最新 1.2.4(repo1.maven.org 查询) | 面向 Spark 3.x 的 DataFrame 辅助函数集 |
| quinn(mrpowers-io/quinn) | Apache-2.0(GitHub 仓库页标识) | GitHub 688 stars(GitHub 仓库页,2026-10-18) | 无正式 GitHub Release(releases/latest 无跳转,2026-10-18 查询),按 Git 主干分发 | 面向 Spark 3.x 的 DataFrame/列函数工具 |
选型建议:需要「经过 ASF 生产验证的 UDF 集合 + 去重/倾斜 join 等成品算子」选 Apache DataFu;仅缺少量 DataFrame 辅助函数且团队偏好轻依赖,可比较 spark-daria/quinn;仍在维护 Pig 作业时 PiggyBank 与 DataFu Pig 二选一,DataFu 的测试覆盖与文档更系统。
八、参考链接
- 官网首页:https://datafu.apache.org/
- Download 页:https://datafu.apache.org/docs/download.html
- DataFu Spark Getting Started:https://datafu.apache.org/docs/spark/getting-started.html
- DataFu Spark Guide:https://datafu.apache.org/docs/spark/guide.html
- DataFu Pig Guide:https://datafu.apache.org/docs/datafu/guide.html
- Hourglass Concepts:https://datafu.apache.org/docs/hourglass/concepts.html
- GitHub 仓库:https://github.com/apache/datafu
- Apache Maven 仓库:https://repository.apache.org/content/groups/public/org/apache/datafu