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 监控每个节点上使用多少缓存容量,并相应地规划资源。