alitrack

DuckDB 能直读 HDFS 了。1.5.5 还没发,1.6.0 已经开建了

如果你在运维 Hadoop 集群,应该太熟悉这个场景了:只是想查一下 HDFS 上某个 Parquet 目录的数据,结果要开 Spark、配 YARN、等半天——就为了跑一条 SELECT。

这周 DuckDB 社区合并了一个扩展,把这个流程缩短成一行 SQL:

SELECT * FROM 'hdfs://namenode:8020/data/events/*.parquet';

对,不用 JVM,不用 libhdfs,不用配 Spark。这是 DuckDB 这周最重量的更新。


● ● ●

HDFS 扩展已合并:纯 Rust 后端,零 JVM 依赖

合入 duckdb/community-extensions 的 hdfs 扩展(github.com/casperhart/duckdb-hdfs),由社区开发者 casperhart 提交,7 月 16 日合并。后端用的是纯 Rust 的 hdfs-native(github.com/Kimahriman/hdfs-native)客户端,通过一层薄 C FFI 桥接进 DuckDB。

这意味着几件事:

  • 零 JVM 启动时间。传统 Hadoop 客户端要拉起整个 JVM,DuckDB 这个扩展不需要。
  • 支持 DuckDB 的并行 Parquet 读取器。读 HDFS 上的 Parquet 文件时,DuckDB 的并发位置读直接起作用。
  • 支持 Kerberos 安全集群。通过标准 ticket/keytab 机制认证。
  • HDFS 透明加密(TDE)。客户端侧解密,通过 KMS 解包密钥。

配置方式也和 Hadoop 生态一致——读 HADOOP_CONF_DIR 下的 core-site.xml / hdfs-site.xml,读 HADOOP_USER_NAME。从 Spark 切过来的人不会觉得陌生。

除了读,还支持 COPY ... TO 写回 HDFS,包括 PARTITION_BY 分区写出。对做 ETL 的团队来说,这意味着 DuckDB 可以替代 Spark 在 HDFS 上做轻量级的数据清洗和转换。

目前 Windows 平台暂不支持(excluded_platforms 里列了),Linux 和 macOS 没问题。


● ● ●

ORC 和 OpenDAL 也在路上了

duckdb_orc(PR #2239):纯 Rust 读 Apache ORC 文件。基于 orc-rust,支持所有 ORC 数据类型(struct、list、map)、所有压缩编解码器(Zlib、Snappy、LZO、LZ4、ZSTD),以及 DuckDB 优化器的投影下推。你可以 read_orc('*.orc') 用 glob 一次读多个文件。

ORC 是 Hive 生态的标准列存格式,大量企业数仓还在用。以前 DuckDB 对 ORC 的支持很弱——这个扩展填了个大坑。

opendal(PR #2249):Apache OpenDAL 集成作 DuckDB 虚拟文件系统。OpenDAL 是一个统一的数据访问层,目前支持 fs://、s3://、memory://,后续还会有更多后端。配置好之后,你对不同存储后端的读写操作都一样——不用为了换存储改代码。

两个扩展都还在 PR 审核阶段,但社区对这两个期待很高。特别是 ORC——这是 DuckDB 连接 Hadoop 生态的又一块拼图,和 HDFS 扩展配合起来用,基本可以覆盖 Hive 数仓的大多数查询场景。


● ● ●

v1.5.5 发布在即,1.6.0 开发也已启动

DuckDB 的版本流水线这周特别热闹。

7 月 14 日,核心维护者 carlopi 合并了 PR #23794:"Bump extensions in preparation for v1.5.5"。这通常是新版本发布前的最后一步——把所有社区扩展的二进制重新编译一遍,对齐新版本。

PyPI 上已经有 duckdb 1.5.5.dev23(7 月 15 日上传),说明 v1.5.5 的发布应该就在这几天了。

同时,1.6.0.dev 的 wheel 也在 PyPI 上出现了——最新的 1.6.0.dev287 同样是 7 月 15 日上传。主分支上,这周合并了 async IO CSV Reader 重构(#23868)、VARCHAR 的 prefix 优化(#23869)、string stats 剪枝改进(#23878)等一批性能优化。

v1.5.5 是个 bugfix 版本,不太可能有新功能。但 v1.6.0 值得期待——按照 DuckDB 的命名惯例,"小版本号跳大版本"(1.5 → 1.6)通常意味着一个功能更丰富的 release。结合 DuckCon #7 上 Hannes 和 Mark 提到的 DuckDB 2.0 路线图,1.6.0 很可能是在为 2.0 做铺垫。


● ● ●

社区速览

  • zarr v0.1.1(PR #2235,已合并):科学计算常用的 Zarr 格式扩展更新。
  • finance v0.2.9(PR #2222,已合并):金融数据函数库扩展更新。
  • RDF v2.8.1(PR #2232,已合并):知识图谱 RDF 格式扩展更新。
  • protoduck v0.1.1(PR #2252):Protocol Buffers 支持扩展更新。
  • ducklink v4.6.1(PR #2253):DuckDB WASM 扩展加载器更新。
  • dplyr v0.5.1(PR #2251):R 用户最熟悉的 dplyr 语法支持扩展更新。

MotherDuck 发布了 7 月的 DuckDB 生态月刊(Simon Späti 主笔)。重点包括 PostHog 从 ClickHouse 迁移到 DuckDB 的详细复盘、Cloudflare R2 + DuckLake 构建便携分析栈的方案,以及 DuckCon #7 的回顾。另外 MotherDuck 新上了两篇 Flights 的教程文章,演示怎么用自然语言一句话生成完整数据管线。


● ● ●

一句话

DuckDB 这周的主题是"连接"——HDFS 直连打通了 Hadoop 生态的最后一段路,ORC 和 OpenDAL 则指向更通用的数据互操作。一个四年前还叫"嵌入式分析数据库"的项目,现在正在变成企业数据栈里真正能打的查询引擎。

你还在用 Spark 查 HDFS 上的小数据吗?试一下这个扩展,跑通了告诉我。


DuckDB 周报,每周六更新。