记录过程


文章目录

  • 概述
  • 环境
  • 安装Presto服务
  • 服务启停
  • 安装Presto客户端
  • 本地JMX连接查询
  • 配置连接Hive查询
  • 文档


概述

这里就不复制粘贴了,描述自己理解的。具体详细的使用和介绍需要去官网学习更好

  • 2014年由FaceBook开源,为了解决自身规模的商业数据仓库的交互式分析和处理速度的问题
  • OLAP大数据查询引擎,适用于交互式分析查询,数据量支持GB到PB字节
  • 设计为秒至分钟级别的响应
  • master-slave架构(Coordinator-Worker)
  • 不是数据库只是个查询引擎(计算引擎),不存数据,不支持OLTP
  • 支持在线查询,可跨多个数据源如hive、mysql、hbase整合查询,跨组织分析
  • 内存计算,影响查询性能的除了自身计算速度,还限制于数据源读取数据速度以及网络IO,如mysql一张千万记录的表去读取数据就很慢
  • 京东对社区版本进行二次开发并且开源,性能有很大提升

presto插入分区语句_presto

环境

  • Centos7
  • Hive
  • Mysql
  • Hadoop的HDFS相关服务(namenode、datanode)
  • JDK

安装Presto服务

选择安装服务端版本并下载:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/

选择安装客户端版本并下载:https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/

这里使用presto-server-0.196.tar.gz包来叙述

  • 解压
tar -zxvf presto-server-0.196.tar.gz -C /opt/module/
  • 配置(Presto配置文件需要自己创建)
  • 在安装目录下创建etc目录然后进去etc目录
mkdir etc
cd etc
  • 配置节点属性配置文件vim node.properties
  • node.environment: 集群名称。所有在同一个集群中的Presto节点必须拥有相同的集群名称。
  • node.id: 每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。
  • node.data-dir: 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据存储在这个目录下。
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data
  • 配置JVM配置 vim jvm.config
-server
-Xmx2G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
  • 配置Presto的配置文件vim config.properties一个coordinator的etc/config.properties应该至少包含以下信息
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

最基本的worker配置

coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery.uri=http://example.net:8080

如果单机配置(一台机器做测试的情况,coordinator和worker同时部署在一台机器上)

如下配置

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

对配置项解释如下:

  • coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)。
  • node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作。对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都不会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。
  • http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯。
  • task.max-memory=1GB:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。 这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER BY语句中的行数和一个窗口函数中处理的行数。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。
  • 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一定不能以“/“结尾。
  • 配置日志 vim log.properties

在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系。 (像java里面的包). 如下面的log配置信息:

com.facebook.presto=INFO
  • 配置Catalog(Presto的组件,可理解为数据源配置)
    先创建在etc目录下创建一个catalog目录,并进入
mkdir catalog
cd catalog

先来个jmx的connector对应的catalog配置文件

vim jmx.properties

connector.name=jmx

此时就已经可以进行测试了,不过数据和文件将都落盘在本地文件系统

服务启停

  • 后台启动(日志打印在日志文件)
bin/launcher start
  • 前台启动(日志打印在控制台)
bin/launcher run
  • 日志目录:data/var/log
  • launcher.log:这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。这份日志文件中只会有很少的信息,包括:

在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。

  • server.log:这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。
  • http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。

安装Presto客户端

mv presto-cli-0.196-executable.jar presto
chmod a+x presto

本地JMX连接查询

前提是配置了catalog,也就是jmx.properties.

注意端口号我自己配置的是38080

  • 不指定数据库(Presto世界观里也叫做是schema)
./presto --server localhost:38080 --catalog jmx
  • 进入后查看所有当前连接器的schema
presto> show schemas;
       Schema       
--------------------
 current            
 history            
 information_schema 
(3 rows)

Query 20200502_155129_00011_gdck8, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:00 [3 rows, 47B] [30 rows/s, 485B/s]
  • 选择一个schema,进行查看所有table
presto> use current;
USE
presto:current> show tables;
                                                                      Table                                                                       
--------------------------------------------------------------------------------------------------------------------------------------------------
 com.facebook.presto.execution.executor:name=multilevelsplitqueue                                                                                 
 com.facebook.presto.execution.executor:name=taskexecutor                                                                                         
 com.facebook.presto.execution.resourcegroups:name=internalresourcegroupmanager                                                                   
 com.facebook.presto.execution.scheduler:name=nodescheduler                                                                                       
 com.facebook.presto.execution.scheduler:name=splitschedulerstats                                                                                 
 com.facebook.presto.execution:name=queryexecution
  • 退出 exit
  • 指定数据库连接
./presto --server localhost:38080 --catalog jmx --schema current

配置连接Hive查询

  • 配置hive的配置文件hive-site.xml,需要配置HiveServer2、MetaStore服务连接信息
    vim /opt/module/hive-1.2.1/conf/hive-site.xml
<property>
  <name>hive.metastore.uris</name>
  <value>thrift://bigdata01:39083</value>
 </property>
  • 启动HiveServer2和MetaStore服务
bin/hive --service hiveserver2 &
bin/hive --service metastore &

可先前台启动即不用加&符号,看是否启动成功

  • 配置Presto的Hive的catalog配置文件:去Presto安装目录下vim etc/catalog/hive.properties
# 这个连接器的选择要根据自身集群情况结合插件包的名字来写
connector.name=hive-hadoop2
# 修改为 hive-metastore 服务所在的主机名称
hive.metastore.uri=thrift://bigdata01:39083
# 如果hive metastore的引用文件存放在一个存在联邦的HDFS上,或者你是通过其他非标准的客户端来访问HDFS集群的,请添加以下配置信息来指向你的HDFS配置文件
hive.config.resources=/opt/module/single-hadoop-2.7.2/etc/hadoop/conf/core-site.xml,/opt/module/single-hadoop-2.7.2/etc/hadoop/conf/hdfs-site.xml

大多数情况下,Presto会在安装过程中自动完成HDFS客户端的配置。 如果确实需要特殊配置,只需要添加一些额外的配置文件,并且需要指定这些新加的配置文件。 建议将配置文件中的配置属性最小化。尽量少添加一些配置属性,因为过多的添加配置属性会引起其他问题

其他更多配置可以去官网查询

  • 客户端连接
  • 不指定schema连接
./presto --server localhost:38080 --catalog hive

一些简单查询

presto> show schemas;
       Schema       
--------------------
 default            
 information_schema 
(2 rows)

Query 20200502_160615_00017_gdck8, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:00 [2 rows, 35B] [10 rows/s, 186B/s]

presto> use default;
USE
presto:default> show tables;
 Table 
-------
 a     
(1 row)

Query 20200502_160639_00019_gdck8, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:00 [1 rows, 18B] [5 rows/s, 93B/s]

presto:default> insert into a values(3);
INSERT: 1 row

Query 20200502_160806_00026_gdck8, FINISHED, 1 node
Splits: 35 total, 35 done (100.00%)
0:01 [0 rows, 0B] [0 rows/s, 0B/s]

presto:default> select * from a;
 a 
---
 1 
 3 
 2 
(3 rows)

Query 20200502_160816_00027_gdck8, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [3 rows, 66B] [17 rows/s, 375B/s]
  • 指定schema连接就是增加 --schema schema名称