presto

前言:不同版本的presto,连接数据源配置属性有区别且不兼容。目前版本的 Presto 也没有提供完整的具备分页功能的 Limit 语法, 所以如果业务上有分页需求, 就只能在业务层拿到数据后自己做分页功能, 但相比业务层实现, 由 Presto 提供不仅仅在于减少数据平台的开发成本, 还在于更少的数据传输和内存压力等优势。

例如:

0.228 (没有host、port的配置项)
connector.name=elasticsearch
elasticsearch.default-schema=default
elasticsearch.table-description-directory=etc/elasticsearch/
elasticsearch.scroll-size=1000
elasticsearch.scroll-timeout=2s
elasticsearch.request-timeout=2s
elasticsearch.max-request-retries=5
elasticsearch.max-request-retry-time=10s
0.239
elasticsearch.host	Host name of the Elasticsearch server.
elasticsearch.port	Port of the Elasticsearch server.
elasticsearch.default-schema	Default schema name for tables.
elasticsearch.scroll-size	Maximum number of hits to be returned with each Elasticsearch scroll request.
elasticsearch.scroll-timeout	Amount of time Elasticsearch will keep the search context alive for scroll requests.
elasticsearch.max-hits	Maximum number of hits a single Elasticsearch request can fetch.
elasticsearch.request-timeout	Timeout for Elasticsearch requests.
elasticsearch.connect-timeout	Timeout for connections to Elasticsearch hosts.
elasticsearch.max-retry-time	Maximum duration across all retry attempts for a single request.
elasticsearch.node-refresh-interval	How often to refresh the list of available Elasticsearch nodes.
elasticsearch.max-http-connections	Maximum number of persistent HTTP connections to Elasticsearch.
elasticsearch.http-thread-count	Number of threads handling HTTP connections to Elasticsearch.

文档地址:https://prestodb.io/docs/0.228/index.html 修改版本号即可

文件下载地址:

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.239.1/presto-server-0.239.1.tar.gz

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.239.1/presto-cli-0.239.1-executable.jar

安装步骤:

  1. 解压
tar -zxvf presto-server-0.239.1.tar.gz
  1. 进入presto-server-0.239.1,并创建data、etc目录
cd presto-server-0.239.1

mkdir data

mkdir etc
  1. 进入etc目录,并创建catalog目录
cd etc/

mkdir catalog 此目录用来存放数据源连接配置
  1. 继续创建presto配置文件
    (1) config.properties presto服务配置
------Coordinator配置------
#是否为Coordinator调度节点
coordinator=true
#是否也作为work。对于大型集群来说,在coordinator里做worker的工作会影响查询性能
node-scheduler.include-coordinator=true
#指定HTTP端口。Presto使用HTTP来与外部和内部进行交流
http-server.http.port=31980
#查询能用到的最大总内存
query.max-memory=8GB
#查询能用到的最大单结点内存
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
#Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署, 不需要额外的服务,Presto的coordinator内置一个Discovery服务。也是使用HTTP端口
discovery-server.enabled=true
#Coordinator节点的域名或者IP,Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署, 不需要额外的服务,Presto的coordinator内置一个Discovery服>务。也是使用HTTP端口
discovery.uri=http://88.88.88.88:31980

------Worker配置------
#指定HTTP端口。Presto使用HTTP来与外部和内部进行交流
http-server.http.port=31980
#查询能用到的最大总内存
query.max-memory=8GB
#查询能用到的最大单结点内存
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
#Coordinator节点的域名或者IP,Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署, 不需要额外的服务,Presto的coordinator内置一个Discovery服>务。也是使用HTTP端口
discovery.uri=http://88.88.88.88:31980

(2) node.properties 节点配置

#自定义环境名字,Presto集群中的结点的环境名字都必须是一样的。
node.environment=production
#唯一标识,每个结点的标识都必须是为一的。就算重启或升级Presto都必须还保持原来的标识。
node.id=ffffffff-ffff-ffff-ffff-fffffffffff1
#数据目录,Presto用它来保存log和其他数据 上述步骤已创建
node.data-dir=/usr/local/presto/presto-server-0.239.1/data

(3) jvm.config 包含启动Java虚拟机时的命令行选项。格式是每一行是一个命令行选项。此文件数据是由shell解析,所以选项中包含空格或特殊字符会被忽略。

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

(4) log.properties 备注:日志级别有四种,DEBUG, INFO, WARN and ERROR

com.facebook.presto=INFO
  1. 进入catalog目录,配置数据源,以ES为例(其它数据源配置请参考官方文档)
cd catalog

vi elasticsearch.properties

connector.name=elasticsearch
elasticsearch.host=888.88.88.888
elasticsearch.port=9200
elasticsearch.scroll-size=1000
elasticsearch.scroll-timeout=2s
elasticsearch.request-timeout=2s
elasticsearch.max-retry-time=10s
  1. 进入/安装目录/bin
./launcher start 后台启动

./launcher stop停止

./launcher run 前台启动,输出日志

./launcher restart 重启
  1. 安装客户端,将presto-cli-0.239.1-executable.jar 放到/安装目录/bin下
#重命名客户端jar包为可执行文件
mv presto-cli-0.239.1-executable.jar presto
  1. 测试连接状态
./presto --server 88.88.88.88:31980
基本语法
show catalogs;
show schemas from 'catalog_name;
show tables from 'catalog_name.schema_name';
select * from catalog_name.schema_name.table_name;

Presto使用Catalog、Schema和Table这3层结构来管理数据。

Catalog:就是数据源。Hive是数据源,Mysql也是数据源,Hive 和Mysql都是数据源类型,可以连接多个Hive和多个Mysql,每个连接都有一个名字。一个Catalog可以包含多个Schema,可以通过show catalogs 命令看到Presto连接的所有数据源。

Schema:相当于一个数据库实例,一个Schema包含多张数据表。show schemas from 'catalog_name'可列出catalog_name下的所有schema。

Table:数据表,与一般意义上的数据库表相同。show tables from 'catalog_name.schema_name'可查看'catalog_name.schema_name'下的所有表。

在Presto中定位一张表,一般是catalog为根,例如:一张表的全称为 hive.test_data.test,标识 hive(catalog)下的 test_data(schema)中test表。

可以简理解为:数据源的大类.数据库.数据表。