Presto是什么?
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节
Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题
Presto可以做什么?
Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储。 一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析
Presto以分析师的需求作为目标,他们期望响应时间小于1秒到几分钟。 Presto终结了数据分析的两难选择,要么使用速度快的昂贵的商业方案,要么使用消耗大量硬件的慢速的“免费”方案。(摘自Presto中文网)
测试环境
1 | Ubuntu Server 14.04 x64 |
Presto安装
下载Presto
1 | # 下载 |
Presto配置
在安装目录中创建一个etc目录。 在这个etc目录中放入以下配置信息:
1 | mkdir etc |
node.properties
- 节点配置:每个节点的环境信息
jvm.config
- JVM 配置:JVM的命令行选项
config.properties
- 参数配置:Presto server的参数信息
log.properties
- 日志信息:配置输出日志级别
catalog目录:
- configuration forConnectors(数据源)的配置信息
node.properties
包含针对于每个节点的特定的配置信息,一个节点就是在一台机器上安装的Presto实例
1 | vim etc/node.properties |
node.environment:集群名称,所有在同一个集群中的Presto节点必须拥有相同的集群名称
node.id:每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id
node.data-dir:数据存储目录的位置(操作系统上的路径),Presto将会把日期和数据存储在这个目录下
jvm.config
包含一系列在启动JVM的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理
Presto会将查询编译成字节码文件,因此Presto会生成很多class,因此我们我们应该增大Perm区的大小(在Perm中主要存储class)并且要允许Jvm class unloading
1 | vim etc/jvm.config |
config.properties
包含了Presto server的所有配置信息。 每个Presto server既是一个coordinator也是一个worker。但是在大型集群中,处于性能考虑,建议单独用一台机器作为 coordinator
新版本中已经不使用一下配置: task.max-memory=1GB
改为:query.max-memory=1GB和query.max-memory-per-node=1GB
1 | vim etc/config.properties |
1 | vim etc/config.properties |
1 | vim etc/config.properties |
coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)
node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作。对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都不会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行
http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯
query.max-memory:一个提交计划在所有worker节点上占用的内存上限
query.max-memory-per-node:一个查询在一个机器上可使用的内存上限
discovery-server.enabled:Presto 通过Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP server并且使用同样的端口
discovery.uri:Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的uri。修改example.net:8080,根据你的实际环境设置该URI。注意:这个URI一定不能以“/“结尾
log.properties
在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系
默认就是INFO,四个级别 DEBUG, INFO, WARN and ERROR
1 | vim etc/log.properties |
数据源Catalog Properties
Presto通过connectors访问数据。这些connectors挂载在catalogs上。 connector 可以提供一个catalog中所有的schema和表
- 创建catalog目录
1 | mkdir etc/catalog |
- 创建jmx连接器
1 | vim etc/catalog/jmx.properties |
运行Presto
- 后台进程启动
1 | bin/launcher start |
- 前台运行, 日志和相关输出将会写入stdout/stderr
1 | bin/launcher run |
启动成功
1 | ...... |
运行bin/launcher–help,Presto将会列出支持的命令和命令行选项。 另外可以通过运行bin/launcher–verbose命令,来调试安装是否正确
启动完之后,日志将会写在data目录下,该目录下有如下文件:
1 | . |
打开WEB界面:http://example.net:8080
常见问题汇总
1.JDK版本过低
- 出现以下错误通常是因为JDK版本低于1.8造成的,Presto要求JDK版本必须为1.8+
1 | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/facebook/presto/server/PrestoServer : Unsupported major.minor version 52.0 |
2.node.properties配置问题
- 出现以下错误通常是因为node.properties文件没有配置,或者配置错误引起的,请参照前文重新配置
1 | 2016-08-21T21:50:41.242+0800 ERROR main com.facebook.presto.server.PrestoServer Unable to create injector, see the following errors: |
转载请注明出处