Presto简介
presto是一个分布式SQL查询引擎,用于查询分布在一个或多个异构数据源上的大型数据集。
更多详细的介绍请移步去Presto官网
Presto的安装
准备
1.检查本机的jdk的版本,Presto要求jdk 1.8 151以上的版本
2.下载Presto的安装包,下载地址presto-server-0.224.tar.gz
3.有一个Presto的客户端,下载地址presto-cli-0.224-executable.jar
开始搭建(以下摘自官网)
- 上传presto的安装包到服务器
- 解压presto的安装包,重命名为prestoserver
- 进入解压后的目录,创建一个etc文件夹
cd prestoserver
mkdir etc
解释:etc文件夹中要保持以下配置:
- 节点属性:特定于每个节点的环境配置
- JVM Config:Java 虚拟机的命令行选项
- 配置属性: Presto服务器的配置
- 目录属性: 连接器(数据源)的配置
1.创建node.properties
vim node.properties
在该文件下面输入如下内容:
node.environment=production
node.id=1
node.data-dir=/export/software/presto/data
解释:
node.enviroment
:环境的名称,群集中的所有Presto节点必须具有相同的环境名称node.id
:此Presto安装的唯一标识符。对于每个节点,这必须是唯一的。在重新启动或升级Presto时,此标识符应保持一致。如果在一台计算机上运行多个Presto安装(即同一台计算机上的多个节点),则每个安装必须具有唯一标识符。- node.data-dir:数据目录的位置(文件系统路径)。Presto将在此处存储日志和其他数据
2.创建jvm.config
JVM配置文件etc/jvm.config
包含用于启动java虚拟机的命令行选项列表。改文件格式是一个选项列表,每行一个。shell不会解释这些选项,英雌不应应用包含空格或其他特殊字符的选项。
以下为创建提供了一个很好的起点etc/jvm.config
:
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
因为OutOfMemoryError
通常会使JVM处于不一致状态,所以我们编写堆转储(用于调试)并在发生这种情况时强制终止进程。
3.vim config.properties
config属性文件etc/config.properties
包含Presto服务器的配置。每个Presto服务器都可以充当协调器和工作器,但是专用一台机器来执行协调工作可以在更大的集群上提供最佳性能。
以下是协调器的最小配置:
coordinator = true
node-scheduler.include-coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
query.max-total-memory-per-node = 2GB
discovery-server.enabled = true
discovery.uri = http://example.net:8080
worker的最小配置:
coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
query.max-total-memory-per-node = 2GB
discovery.uri = http:/ /example.net:8080
或者,如果要设置单个机器进行测试,它将同时充当协调器和工作器,请使用此配置:
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://example.net:8080
解释:
coordinator
:允许此Presti实例充当协调器(接收来自此客户端的查询并管理查询执行)node-scheduler.include-coordinator
:循序在协调器上安排工作。对于较大的集群,协调器上的处理工作可能会影响查询性能,因为计算机的资源不可用于调度,管理和监视查询执行的关键任务。http-server.http.port
:指定HTTP服务器的端口。Presto使用HTTP进行内部和外部的所有通信。query.max-memory
:查询可能使用的最大分布式内存量query.max-memory-per-node
:查询可在任务一台计算机上使用的最大用户内存量。query.max-total-memory-per-node
:查询可在任何一台计算机上使用的最大用户和系统内存量,其中系统内存是读取器,写入程序和网络缓冲区等执行期间使用的内存。disconvery-server.enabled
:Presto使用Discovery服务查找群集中的所有节点。每个Presto实例都会在启动时使用Discovery服务注册自己。为了简化部署并避免运行其他服务,Presto协调器可以运行Discovery的嵌入式版本。它与Presto共享HTTP服务器,因此使用相同的端口。discover.uri
:Discovery服务器的URI。因为我们在Presto协调器中启用了Discovery的嵌入式版本,所以它应该是Presto协调器的URI。替换example.net:8080
以匹配Presto协调器的主机和端口。此URI不得以斜杠结尾。
可能想设置以下属性:
jmx.rmiregistry.port
:指定JMX RMI注册表的端口。JMX客户端应该连接到此端口。jmx.rmiserver.port
:指定JMX RMI服务器的端口。Presto导出许多对通过JMX进行监控有用的指标。
4.vim log.properties
可选的日志级别文件etc/log.properties
允许为命名的记录器层次结构设置最小日志级别。每个记录器都有一个名称,通常是使用记录器的类的完全限定名称。记录器具有基于名称中的点的层次结构(如Java包)。例如,请考虑以下日志级别文件:
com.facebook.presto = INFO
这将最低级别设置为INFO
两个 com.facebook.presto.server
和com.facebook.presto.hive
。默认的最低级别是INFO
(因此上面的示例实际上并没有改变任何东西)。共有四个级别:DEBUG
,INFO
,WARN
和ERROR
。
5.mkdir catalog
Presto通过连接器访问数据,连接器安装在目录中。连接器提供目录内的所有模式和表。例如,Hive
连接器将每个Hive
数据库映射到一个模式,因此如果Hive
连接器作为hive
目录安装,而Hive
clicks
在数据库中包含一个表web
,那么该表将在Presto
中被访问hive.web.clicks
。
通过在目录中创建目录属性文件来注册etc/catalog
目录。例如,etc/catalog/jmx.properties
使用以下内容创建以将jmx
连接器安装为jmx
目录:
connector.name = JMX
注意
以上就可以将整个搭建搭建完毕了,注意的就是node.properties
中的node.id 属性不应该一致。discovery.uri
这个属性我用了其中的一台机器的hostname:8080设定好了,别直接照搬官方的文档
接下来就是启动Presto,在三台服务器的Presto的根目录下使用
后台启动方式:
bin/launcher start
出现,如下样式即表明成功
started as 1936
前台启动方式:
bin/launcher run
启动之后,在浏览器输入对应的地址可以看到:
如果启动失败了log
日志文件地址在node.properties
配置文件只中的node.data.dir
目录里面寻找一个var
的文件夹下去找
若想使用客户端的话,要额外下载一个jar
包上文已经提到过了一次,这里再写一遍,下载presto-cli-0.224-executable.jar
将这个jar
重新命名为presto
并且赋予可执行权限chmod u+x presto
执行命令如下
./presto --server localhost:8080 --catalog hive --schema default
可以看到:
经验之谈:
据我的测试了解:
--catalog
所用的参数hive
应该就是catalog
文件夹里面的hive.properties
--schema
所用的参数default
应该就是hive
中的数据库名