Alluxio 缓存服务¶
概述¶
提高 Presto 查询延迟的常见优化方法是将工作集缓存起来,以避免从远程数据源或通过缓慢的网络进行不必要的 I/O。本节介绍如何利用 Alluxio 作为 Presto 的缓存层。
Alluxio 文件系统 为 Presto Hive 连接器提供服务,作为 HDFS 或 AWS S3、GCP、Azure Blob 存储等对象存储之上的独立分布式缓存文件系统。用户可以通过文件系统接口了解缓存使用情况并显式控制缓存。例如,可以将 Alluxio 目录中的所有文件预加载到缓存中,以便为 Presto 查询预热缓存,并设置 TTL(生存时间)以回收缓存容量。
Presto Hive 连接器可以连接到 AlluxioFileSystem 作为 Hadoop 兼容的文件系统,位于其他持久存储系统之上。
设置¶
首先,配置 ${PRESTO_HOME}/etc/catalog/hive.properties
以使用 Hive 连接器。
connector.name=hive-hadoop2
hive.metastore.uri=thrift://127.0.0.1:9083
其次,确保 Alluxio 客户端 jar 已经位于所有 Presto 服务器上的 ${PRESTO_HOME}/plugin/hive-hadoop2/
中。如果不是这种情况,请 下载 Alluxio 二进制文件,将 tarball 解压缩到 ${ALLUXIO_HOME}
并将 Alluxio 客户端 jar ${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar
复制到此目录中。重启 Presto 服务
$ ${PRESTO_HOME}/bin/launcher restart
第三,配置 Hive 元存储在为 Presto 提供服务时连接到 Alluxio 文件系统。编辑 ${HIVE_HOME}/conf/hive-env.sh
以将 Alluxio 客户端 jar 包含在 Hive 类路径中
export HIVE_AUX_JARS_PATH=${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar
然后重启 Hive 元存储
$ ${HIVE_HOME}/hcatalog/sbin/hcat_server.sh start
查询¶
完成基本配置后,Presto 应该能够使用指向 alluxio://
地址的表访问 Alluxio 文件系统。请参考 Hive 连接器 文档了解如何在 Presto 中配置 Alluxio 文件系统。以下是一个简单的例子
$ cd ${ALLUXIO_HOME}
$ bin/alluxio-start.sh local -f
$ bin/alluxio fs mount --readonly /example \
s3://apc999/presto-tutorial/example-reason/
启动一个连接到上一步骤中启动的服务器的 Prest CLI。
下载 presto-cli-0.289-executable.jar,将其重命名为 presto
,使用 chmod +x
使其可执行,然后运行它
$ ./presto --server localhost:8080 --catalog hive --debug
presto> use default;
USE
根据挂载在 Alluxio 中的文件创建新表
presto:default> DROP TABLE IF EXISTS reason;
DROP TABLE
presto:default> CREATE TABLE reason (
r_reason_sk integer,
r_reason_id varchar,
r_reason_desc varchar
) WITH (
external_location = 'alluxio://127.0.0.1:19998/example',
format = 'PARQUET'
);
CREATE TABLE
扫描 Alluxio 上新创建的表
presto:default> SELECT * FROM reason LIMIT 3;
r_reason_sk | r_reason_id | r_reason_desc
-------------+------------------+---------------------------------------------
1 | AAAAAAAABAAAAAAA | Package was damaged
4 | AAAAAAAAEAAAAAAA | Not the product that was ordred
5 | AAAAAAAAFAAAAAAA | Parts missing
基本操作¶
使用 Alluxio 文件系统,这种方法支持以下功能
预加载:用户可以使用类似 alluxio fs distributedLoad 的命令行,主动将工作集加载到 Alluxio 中,除了根据数据访问模式透明地缓存数据。
读/写类型和数据策略:用户可以定制 Presto 在从 Alluxio 读取和写入数据时的读写模式。例如,告诉 Presto 读取某些位置的数据时跳过缓存,避免缓存抖动,或者使用 alluxio fs setTtl 设置给定位置中文件的 TTL。
检查工作集:用户可以验证哪些文件被缓存,以了解和优化 Presto 性能。例如,用户可以检查 Alluxio 命令行 alluxio fs ls 的输出,或者浏览 Alluxio WebUI 上的对应文件。
检查资源利用率:系统管理员可以使用 alluxio fsadmin report 监控每个节点上使用多少缓存容量,并相应地规划资源。