通过 Alluxio 使用 Presto 查询 Iceberg 表
Presto 在 0.256 版本中新增了对 Iceberg 表支持的功能。
本文档介绍如何通过 Alluxio 使用 Presto 查询 Iceberg 表。本文档目前处于实验性阶段,此处所述信息可能会发生变化。
要使用 Presto 查询 Iceberg 表,请确保已设置好 Presto,Hive Metastore 和 Alluxio,并且 Presto 可以通过 Alluxio 的文件系统接口访问数据。否则,请参考 Presto 的通用安装和配置指南进行设置。该指南的大部分内容也适用于 Iceberg 流程,本文档包含了使用 Iceberg 表的详细说明。
部署条件
- Presto 通用设置的所有部署条件
- 服务器版本不低于 0.257
基本设置
在 Presto 连接器上安装 Alluxio client jar
将位于 /<PATH_TO_ALLUXIO>/client/alluxio-2.10.0-SNAPSHOT-client.jar
的 Alluxio client jar 复制到位于 ${PRESTO_HOME}/plugin/iceberg/
的 Presto Iceberg 连接器路径中, 然后重启 Presto 服务器:
$ ${PRESTO_HOME}/bin/launcher restart
这里需注意,相同的 client jar 文件应位于 Hive 的类路径下。否则,请参阅共同部署 Hive 和 Alluxio 的章节来设置 Hive。
配置 Presto 来使用 Iceberg 连接器
Presto 使用 Iceberg 连接器读取和写入 Iceberg 表。要启用 Iceberg 连接器,在 Presto 的安装目录 ${PRESTO_HOME}/etc/catalog/iceberg.properties
中为 Iceberg 连接器创建一个 catalog:
connector.name=iceberg
hive.metastore.uri=thrift://localhost:9083
根据设置,修改 Hive Metastore 的连接 URI。
示例:使用 Presto 查询 Alluxio 上的Iceberg表
创建 schema 和 Iceberg 表
为了方便演示,我们创建一个示例 schema 和一个 Iceberg 表。 使用以下命令启动 Presto CLI client:
./presto --server localhost:8080 --catalog iceberg --debug
有关 client 的更多信息,请参阅使用 Presto 查询表章节。由于我们要处理的是 Iceberg 表,这里需将 catalog 设置为iceberg
。
在 client 运行以下语句:
CREATE SCHEMA iceberg_test;
USE iceberg_test;
CREATE TABLE person (name varchar, age int, id int)
WITH (location = 'alluxio://localhost:19998/person', format = 'parquet');
更改 Alluxio 连接器 URI 中的 hostname 和端口来匹配你的配置。
这些语句在 Alluxio 文件系统的 /person
路径下创建一个名为 iceberg_test
的 schema 和一个名为 person
的表,并将表存成 Parquet 格式。
在表中插入示例数据
在新创建的表中插入一行示例数据:
INSERT INTO person VALUES ('alice', 18, 1000);
注意:Presto 中 Iceberg 连接器的写入路径存在 bug,因此数据插入可能会失败。在 Presto 0.257 版本中,此 PR 已解决该问题。
也可查看Alluxio中的文件现在可通过从表中读回数据来验证是否一切正常:
SELECT * FROM person;
也可查看 Alluxio 中的文件:
$ bin/alluxio fs ls /person
drwxr-xr-x alluxio alluxio 10 PERSISTED 06-29-2021 16:24:02:007 DIR /person/metadata
drwxr-xr-x alluxio alluxio 1 PERSISTED 06-29-2021 16:24:00:049 DIR /person/data
$ bin/alluxio fs ls /person/data
-rw-r--r-- alluxio alluxio 400 PERSISTED 06-29-2021 16:24:00:691 100% /person/data/6e6a451a-8f20-4d73-9ef6-ee48070dad27.parquet
$ bin/alluxio fs ls /person/metadata
-rw-r--r-- alluxio alluxio 1406 PERSISTED 06-29-2021 16:23:28:608 100% /person/metadata/00000-2fd982ae-2a81-44a8-a4db-505e9ba6c09d.metadata.json
...
(snip)
这里可以看到, Iceberg 表的 metadata 文件与 data 文件已经创建成功。