一 目的
本文档主要介绍在文件存储HDFS版上搭建及使用 Presto。
二 背景信息
Presto 是一个开源的分布式SQL查询引擎,适用于交互式分析查询。
说明:在本文档中 Presto 连接 Hive 元数据服务来读取文件存储HDFS版上的数据。在文件存储HDFS版上使用 Presto 时需要额外配置一些依赖包,详细操作步骤请参见:配置Presto章节。
三 准备工作
- 开通文件存储HDFS版服务并创建文件系统实例和挂载点,详细文档请参见:快速入门。
- 在 Hadoop 集群所有节点上安装JDK。版本不能低于1.8。
- 建议您使用的 Hadoop 版本不低于2.7.2,本文档中使用的 Hadoop 版本为 Apache Hadoop 2.7.2。
- 在 Hadoop 集群中配置文件存储HDFS版实例,详细文档请参见:挂载文件系统。
- 在集群中安装 Hive 。本文档中使用的 Hive 版本为 2.3.7。
- 下载 Presto 安装包和
presto-cli-xxx-executable.jar
,下载地址:官方链接。在本文档使用的版本为 0.265.1。
四 配置 Presto
Presto 的官方部署文档请参见:Deploying Presto
- 解压 Presto 安装包
tar -zxf presto-server-0.265.1.tar.gz
- 在 Presto 解压目录下创建 etc 目录
mkdir presto-server-0.265.1/etc
- 创建
etc/node.properties
并配置
node.environment=production node.id=ffffffff-ffff-ffff-ffff-ffffffffffff node.data-dir=/var/presto/data
- 创建
etc/jvm.config
并配置
-server -Xmx8G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
- 创建
etc/config.properties
并配置,在本文档中将 Coordinator 和 Worker 配置在了同一台机器,您可以参考 Presto 官方文档将 Coordinator 和 Worker 配置到不同的机器
coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8080 query.max-memory=5GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery-server.enabled=true discovery.uri=http://xx.xx.xx.xx:8080 #xx.xx.xx.xx为当前机器的ip地址
- 创建
etc/log.properties
并配置
com.facebook.presto=INFO
- 创建
etc/catalog
目录
mkdir presto-server-0.265.1/etc/catalog
- 创建
etc/catalog/hive.properties
并配置
connector.name=hive-hadoop2 hive.metastore.uri=thrift://xxxx:9083 #xxxx为启动 hive 元数据服务的ip地址 hive.config.resources=/etc/hadoop/core-site.xml
- 编译并替换 Jar 包
Presto 使用 maven-shade-plugin
插件打包,对引入的 Hadoop 依赖进行了重命名,文件存储HDFS版 Java SDK 和 Hadoop 共用了 protobuf-xxx.jar
包,Presto 通过 Hive Metastore 读取文件存储HDFS版上的数据时,文件存储HDFS版获取不到 Presto 重命名地址后的 protobuf-xxx.jar
包而报错。为了避免兼容性问题,文件存储HDFS版的Java SDK 需要作为 Presto Hadoop 的依赖项引入,并对 Presto 中引入的 Hadoop Jar 包 hadoop-apache2-xxx.jar
重新编译。
查看您目前安装的 Presto 中的 presto-hadoop-apache2
版本。
以 0.265.1 为例,源码 POM 文件地址为:pom.xml , 通过 POM 文件可以看到引入的 hadoop-apache2 版本为 2.7.4-9。
下载 presto-hadoop-apache2
对应版本的源码,下载地址:官方链接。
git clone -b 2.7.4-9 https://github.com/prestodb/presto-hadoop-apache2.git
在源码中的 POM 文件中添加文件存储HDFS版最新 Java SDK 的依赖项。本文档中使用的版本为 1.0.5。
vim presto-hadoop-apache2/pom.xml <dependency> <groupId>com.aliyun.dfs</groupId> <artifactId>aliyun-sdk-dfs</artifactId> <version>1.0.5</version> </dependency>
编译 presto-hadoop-apache2
cd presto-hadoop-apache2 mvn clean package -DskipTests
在 presto-hadoop-apache2/target
目录下查看生成的 hadoop-apache2-2.7.4-9.jar
将编译好的 hadoop-apache2-2.7.4-9.jar
替换掉 Presto 安装目录下旧 Jar 包
## 移除旧的 hadoop-apache2-2.7.4-9.jar mv presto-server-0.265.1/plugin/hive-hadoop2/hadoop-apache2-2.7.4-9.jar presto-server-0.265.1/plugin/hive-hadoop2/hadoop-apache2-2.7.4-9.jar.bak ## 将新的 hadoop-apache2-2.7.4-9.jar 依赖包拷贝到对应的目录下 cp presto-hadoop-apache2/target/hadoop-apache2-2.7.4-9.jar presto-server-0.265.1/plugin/hive-hadoop2/
- 将
presto-cli-xxx-executable.jar
复制到presto-server-0.265.1/bin/
目录下重命名并添加可执行权限
cp presto-cli-0.265.1-executable.jar presto-server-0.265.1/bin/ mv presto-server-0.265.1/bin/presto-cli-0.265.1-executable.jar presto-server-0.265.1/bin/presto chmod +x presto-server-0.265.1/bin/presto
五 验证 Presto
- 启动 Hive 的元数据服务
./hive --service metastore
- 启动 Presto Server 并链接 Hive Metastore
## 启动 Presto Server presto-server-0.265.1/bin/launcher start ## 使用 Presto 连接 Hive Metastore presto-server-0.265.1/bin/presto --server localhost:8080 --catalog hive
- 创建 Hive 数据库
## 在文件存储HDFS版实例上创建测试目录 hadoop fs -mkdir dfs://f-xxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test ## 在 Hive 中创建数据库 presto> CREATE SCHEMA hive.prosto_test -> WITH (location = 'dfs://f-xxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test'); presto> show SCHEMAS;
- 在创建的数据库下新建表并插入数据
presto> use prosto_test; presto:prosto_test> CREATE TABLE user_info_test ( -> user_id bigint, -> firstname varchar, -> lastname varchar, -> country varchar -> ) -> WITH ( -> format = 'TEXTFILE' -> ); presto:prosto_test> INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
- 查看文件存储HDFS版实例上是否有创建的表数据
hadoop fs -ls dfs://f-xxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test/*
- 进行 Word Count 计算
presto:prosto_test> SELECT country,count(*) FROM user_info_test GROUP BY country;
了解更多关于文件存储HDFS版的产品信息,欢迎访问https://www.aliyun.com/product/alidfs
如果您对文件存储HDFS版有任何问题,欢迎钉钉扫描以下二维码加入文件存储HDFS版技术交流群。