Presto
Last updated
Last updated
是一个开源的分布式 SQL 查询引擎,用于对数据进行大规模的交互式分析查询。 本指南介绍了如何使用 Alluxio 作为分布式缓存层运行 Presto 进行查询,其中数据源可以是 AWS S3、Azure Blob Store、HDFS 和许多其他数据源。 使用此设置,Alluxio 将帮助 Presto 访问数据(不论是何数据源),并透明地将频繁访问的数据(例如,常用的表)缓存到 Alluxio 的分布式存储中。 将 Alluxio worker 与 Presto worker 同置部署,可以提升数据本地性,减少 I/O 访问延迟,尤其是在数据是远程的或网络缓慢或拥塞的情况下效果更明显。
安装 Java 8 Update 60 或更高版本(8u60+)的 64 位 Java。
。 本指南基于presto-0.208
测试。
已经安装并运行 Alluxio。
确保 Alluxio 客户端 jar 包是可用的。 在从 Alluxio 下载的压缩包的{{site.ALLUXIO_CLIENT_JAR_PATH}}
中,可以找到 Alluxio 客户端 jar 包。
确保 Hive metastore 正在运行以提供 Hive 表的元数据信息。
Presto 从 Hive Metastore 中获取数据库和表元数据的信息,同时获取表数据的文件系统位置。 编辑 Presto 的 ${PRESTO_HOME}/etc/catalog/hive.properties
配置:
把 Alluxio 客户端 jar 包{{site.ALLUXIO_CLIENT_JAR_PATH}}
放到所有 Presto 服务器的${PRESTO_HOME}/plugin/hive-hadoop2/
目录(该目录可能会因版本而不同)中。重启 Presto 服务:
从 Alluxio 的已有文件创建一个 Hive 外部表:
在http://master_hostname:19999
上查看 Alluxio WebUI,你可以看到 Hive 创建的目录和文件:
确保 Hive metastore 服务正在运行。Hive metastore 默认监听端口9083
。如果 Hive metastore 没在运行,运行以下命令来启动 Hive metastore:
启动 Presto 服务器。Presto 服务器默认在8080
端口运行(可以通过${PRESTO_HOME}/etc/config.properties
中的http-server.http.port
设置):
运行简单的查询(使用你实际的 Presto 服务器主机名和端口替换localhost:8080
):
你可以从控制台看到查询结果:
Presto 服务器日志:
或者,你可以将这些属性添加到 Hadoop 配置文件(core-site.xml
,hdfs-site.xml
)中,并使用文件$presto/etc/catalog/hive.properties
中的 Presto 属性hive.config.resources
来为每个 Presto worker 指明文件位置。
要使用容错模式的 Alluxio,需要在 classpath 中的alluxio-site.properties
文件中适当设置 Alluxio 集群的属性。
或者,你可以将属性添加到hive.config.resources
所包含的 hadoop core-site.xml
配置中。
例如,更改alluxio.user.file.writetype.default
,从默认的MUST_CACHE
改为CACHE_THROUGH
。
一种方法是在alluxio-site.properties
中设置属性,并将此文件分发到每个 Hive 节点的 classpath:
或者,更改conf/hive-site.xml
:
建议将alluxio.user.network.data.timeout
增加到较大的值(例如10min
),以避免从远程的 worker 读取大文件时超时失败。
在完成基础配置后,Presto 应该能够访问 Alluxio 中的数据。 要为 Presto 配置更高级的特性,请参考中的步骤。
下面是一个依靠 Alluxio 中的文件在 Hive 中创建内部表的示例。 你可以从 下载数据文件(例如,ml-100k.zip
)。 解压文件,并将文件u.user
上传到 Alluxio 的/ml-100k/
目录:
按照 下载presto-cli-<PRESTO_VERSION>-executable.jar
,将其重命名为presto
,并使用chmod +x
使其变成可执行的(有时${PRESTO_HOME}/bin/presto
中存在可执行的presto
,你可以直接使用它)。
要配置其他 Alluxio 属性,可以将包含的配置路径(即${ALLUXIO_HOME}/conf
)追加到 Presto 文件夹下的etc/jvm.config
的 JVM 配置中。 这种方法的优点是能够在同一个alluxio-site.properties
文件中设置所有的 Alluxio 属性。
Presto 的 Hive 集成使用配置来控制查询的并行度。 对于 Alluxio 1.6 或更早版本,建议将此大小设置为不小于 Alluxio 的块大小,以避免同一块中的读取竞争。对于以后的 Alluxio 版本,由于 Alluxio Worker 上有了异步缓存,这不再是一个问题。
当你看到类似如下错误信息时,很可能 Alluxio 客户端 jar 包没有被放入到 Presto worker 的 classpath 中。请按照来解决此问题。