一、Presto-Server安装
一、环境要求
- linux或者MacOS
- Java8 64位
- Python 2.4+
二、Java8安装
-
安装
yum install java-1.8.0-openjdk* -y
-
查看java版本
java -version
三、下载解压Presto安装包
-
下载安装包
点击官网下载 -
上传presto-server-0.245.1.tar到 hadoop01 的/export/server目录
-
解压
tar -xzvf presto-server-0.245.1.tar.gz mv presto-server-0.245.1 presto
-
查看目录结构
cd /export/server/presto
-
Presto需要一个用于存储日志等的data目录。建议在安装目录之外创建一个data目录,以便在升级Presto时可以保留此目录。
四、配置
-
在安装目录中创建一个etc目录,此目录下将会包含以下配置文件:
- node.properties: 每个节点的环境配置
- jvm.config: JVM的命令行选项
- config.properties: Presto Server的配置项
- catalog/hive.properties: 数据源连接器的配置,此课程将使用hive数据源
-
节点环境配置
etc/node.properties,每个节点的特定配置。
一个节点指的是服务器上Presto的单个已安装实例。node.environment=production node.id=f7c4bf3c-dbb4-4807-baae-9b7e41807bc8 node.data-dir=/export/server/data
node.environment:环境的名称。群集中的所有Presto节点必须具有相同的环境名称。
node.id:此Presto安装的唯一标识符。这对于每个节点都必须是唯一的。在重新启动或升级
Presto时,此标识符应保持一致。如果在一台计算机上运行多个Presto安装(即同一台计算机上有多个节点),则每个安装必须具有唯一的标识符。
node.data-dir:数据目录的位置(文件系统路径)。Presto将在此处存储日志和其他数据。 -
JVM虚拟机配置
etc/jvm.config,包含用于启动Java虚拟机的命令行选项列表。文件的格式是选项列表,每行
一个。不能使用空格或其他特殊字符。-server -Xmx5G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
由于OutOfMemoryError将会导致JVM处于不一致状态,所以遇到这种错误的时候我们一般的处理措施就是记录下dump heap中的信息(用于debugging),然后强制终止进程。
-
Presto服务配置
etc/config.properties,包含Presto服务器的配置。
Presto服务氛围三种角色:coordinator、worker、coordinator&worker。每个Presto服务都可以充当coordinator和worker,但是独立出一台服务器专用于coordinator协调工作将在较大的群集上提供最佳性能。-
coordinator配置
coordinator=true node-scheduler.include-coordinator=false http-server.http.port=8090 query.max-memory=4GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery-server.enabled=true discovery.uri=http://example.net:8090
-
worker配置
coordinator=false http-server.http.port=8090 query.max-memory=4GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery.uri=http://example.net:8090
-
coordinator&worker配置
coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8090 query.max-memory=4GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery-server.enabled=true discovery.uri=http://192.168.88.80:8090
-
配置项含义
- coordinator:允许此Presto实例充当coordinator协调器角色(接受来自客户端的查询并管理查询执行)。
- node-scheduler.include-coordinator:允许此Presto实例充当coordinator&worker角色。对于较大的群集,coordinator上的worker工作可能会影响查询性能,因为两者互相争抢计算机的资源会导致调度的关键任务受到影响。
- http-server.http.port:指定HTTP服务器的端口。Presto使用HTTP进行内部和外部所有通信。
- query.max-memory:单个query操作可以使用的最大集群内存量。
- query.max-memory-per-node:单个query操作在单个节点上用户内存能用的最大值。
- query.max-total-memory-per-node:单个query操作可在单个节点上使用的最大用户内存量和系统内存量,其中系统内存是读取器、写入器和网络缓冲区等在执行期间使用的内存。
- discovery-server.enabled:Presto使用发现服务Discovery service来查找群集中的所有节点。每个Presto实例在启动时都会向Discovery服务注册。为了简化部署并避免运行其他服务,Presto协调器coordinator可以运行Discovery服务的嵌入式版本。它与Presto共享HTTP服务器,因此使用相同的端口。
- discovery.uri:Discovery服务的URI地址。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的uri。修改example.net:8090,根据你的实际环境设置该URI。此URI不得以“/“结尾。
-
-
日志级别
etc/log.properties
在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。
Loggers通过名字中的“.“来表示层级和集成关系(像java里面的包)。com.facebook.presto=INFO
这会将com.facebook.presto.server和com.facebook.presto.hive的日志级别都设置为INFO。
共有四个级别:DEBUG,INFO,WARN和ERROR。 -
连接器配置
Presto通过catalogs中的连接器connectors访问数据。connector提供了对应catalog中的所有
schema和table。比如,如果在catalog中配置了Hive connector,并且此Hive的’web’数据库中有一个’clicks’表,该表在Presto中就可以通过hive.web.clicks来访问。
通过在etc/catalog目录中创建配置文件来注册connector。比如,通过创建etc/catalog/hive.properties,即可用来注册hive的connector:
connector.name=hive-hadoop2
hive.metastore.uri=thrift://192.168.88.80:9083
Presto连接器支持以下版本hive:
1.Apache Hive 1.x
2.Apache Hive 2.x
3.Cloudera CHD 4
4.Cloudera CHD 5
Presto的Hive连接器支持的文件类型:
1.ORC
2.Parquet
3.Avro
4.RCFile
5.SequenceFile
6.JSON
7.Text
-
运行Presto
在安装目录的bin/launcher文件,就是启动脚本。Presto可以使用如下命令作为一个后台进程
启动:bin/launcher start
另外,也可以在前台运行,日志和相关输出将会写入stdout/stderr (可以使用类似daemontools
的工具捕捉这两个数据流):bin/launcher run
运行bin/launcher --help,Presto将会列出支持的命令和命令行选项。另外可以通过运行时使
用–verbose参数,来调试安装是否正确。
访问web:http://192.168.88.80:8090/ui/
启动完之后,日志将会写在node.data-dir 配置目录的子目录var/log下,该目录下有如下三个文件:
- launcher.log:这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。这份日志文件中只会有很少的信息,包括:在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。
- server.log:这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。
- http-request.log:这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。
二、Presto-Cli安装
Presto CLI提供了基于终端的交互式命令程序,用于运行查询。Presto CLI是一个可执行的JAR
文件,这意味着它的行为类似于普通的UNIX可执行文件。
下载presto-cli-0.245.1-executable.jar
将其重命名为presto,使用chmod +x分配执行权限后,运行:
#上传presto-cli-0.245.1-executable.jar到/export/server/presto/bin
mv presto-cli-0.245.1-executable.jar presto
chmod +x presto
./presto --server localhost:8090 --catalog hive --schema default
三、Presto验证
创建数据库(Hive)
create database myhive;
查看数据库(Hive)
show databases;
四、Presto集群搭建
一、节点规划
二、分发配置文件
先在第二台和第三台服务器上创建对应的目录:
mkdir -p /export/server
在第一台执行复制命令:
scp -r presto root@hadoop02:/export/server
scp -r presto root@hadoop03:/export/server
三、配置
hadoop01节点作为coordinator节点,其余两个节点为Worker节点。
-
etc/config.properties(hadoop01-coordinator)
coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8090 query.max-memory=4GB query.max-memory-per-node=1GB discovery-server.enabled=true discovery.uri=http://192.168.88.80:8090
-
etc/jvm.config(hadoop01-coordinator)
-server -Xmx8G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
-
etc/node.properties(hadoop01-coordinator)
node.environment=cdhpresto node.id=presto-cdh01 node.data-dir=/export/server/data
-
etc/catalog/hive.properties(hadoop01-coordinator)
connector.name=hive-hadoop2 hive.metastore.uri=thrift://192.168.88.80:9083
-
etc/config.properties(hadoop02/03-worker配置)
coordinator=false http-server.http.port=8090 query.max-memory=4GB query.max-memory-per-node=1GB discovery.uri=http://192.168.88.80:8090
-
etc/jvm.config(hadoop02/03-worker配置)
-server -Xmx8G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
-
etc/node.properties(hadoop02/03-worker配置)
node.environment=cdhpresto node.id=presto-cdh02 node.data-dir=/export/server/data
-
etc/catalog/hive.properties(hadoop02/03-worker配置)
connector.name=hive-hadoop2 hive.metastore.uri=thrift://192.168.88.80:9083
四、运行
-
创建快捷启动脚本
-
在用户根目录创建脚本文件:
cd ~ vim start_presto.sh
-
在文件中写入:
/export/server/presto/bin/launcher start
-
分配执行权限:
chmod +x start_presto.sh
-
启动三台presto:
./start_presto.sh
-
查看是否启动成功:
ps -ef|grep presto
-
-
启动Presto客户端
启动三台presto,然后通过CLI分别登录三台server进行测试。 -
设置presto环境变量:
vim /etc/profile
-
在文件末尾写入:
export PRESTO_HOME=/export/server/presto export PATH=$PATH:$PRESTO_HOME/bin
-
执行生效:
source /etc/profile
-
启动presto-cli:
presto --server 192.168.88.80:8090 --catalog hive --schema default
-
测试SQL:
use myhive; select * from employee;