Presto 安装部署与介绍

时间:2021-06-14 01:21:38

presto官网:Presto: Free, Open-Source SQL Query Engine for any Data

Presto简介:
Presto 是由 Facebook 开发的一个分布式 SQL 查询引擎, 它被设计为用来专门进行高速、实时的数据分
析。它的产生是为了解决 Hive MapReduce 模型太慢以及不能通过 BI Dashboards 直接展现 HDFS
据等问题。
Presto 是一个纯粹的纯内存的计算引擎,它不存储数据,其通过 Connector (类比 mr 中的 inputformat
组件)获取第三方 Storage 服务的数据 .
Ad-hoc (即席查询),期望查询时间秒级或几分钟
Hive 10
支持多数据源,如 Hive Kafka MySQL MonogoDB Redis JMX 等,也可自己实现 Connector
Client Protocol: HTTP+JSON, support various languages(Python, Ruby, PHP, Node.js Java)
支持 JDBC/ODBC 连接
ANSI SQL ,支持窗口函数, join ,聚合,复杂查询等
Presto 特点
Presto 是一个分布式的查询引擎,本身并不存储数据
presto 可以接入多种数据源,并且支持跨数据源查询(包括 hive rmdb kafka 等)。
一条 Presto 查询可以将多个数据源的数据进行合并分析
Presto 是一个 OLAP 的工具,擅长对海量数据进行复杂的分析;但是对于 OLTP 场景,并不是 Presto 所擅
长,所以不要把 Presto 当做数据库来使用
和大家熟悉的 Mysql 相比:
首先, Mysql 是一个数据库,具有存储和计算分析能力,而 Presto 只有计算分析能力;
其次,数据量方面, Mysql 作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数
据的存储和分析工具产生, Presto 就是这样一个可以满足大数据量分析计算需求的一个工具
Presto 数据管理模型
Presto 使用 Catalog Schema Table 3 层结构来管理数据。
Catalog: 就是数据源。 Hive 是数据源, Mysql 也是数据源, Hive Mysql 都是数据源类型,可以连
接多个 Hive 和多个 Mysql ,每个连接都有一个名字。一个 Catalog 可以包含多个 Schema ,大家可以
通过 show catalogs 命令看到 Presto 连接的所有数据源。
Schema :相当于一个 ,一个 Schema 包含多张数据表。
show schemas from 'catalog_xx' 可列出 catalog_xx 下的所有 schema
Table 数据表 ,与一般意义上的数据库表相同。
show tables from 'catalog_xx.schema_yy' 可查看 catalog_xx.schema_yy 下所有表。

下载presto:

presto 原理
Master-Slave 架构
三个模块: Coordinator Discovery Service Worker
Connector
Presto 沿用了通用的 Master-Slave 架构, Coordinator Presto Master Worker 即其 Slave
Discovery Service 就是用来保存 Worker 结点信息的,通过 HTTP 协议通信,而 Connector 用于获取第三
方存储的 Metadata 及原始数据等。
假如配置了 Hive Connector ,需要配置一个 Hive MetaStore 服务为 Presto 提供 Hive 元信息, Worker
点与 HDFS 交互读取数据。 Coordinator 负责解析 SQL 语句,生成执行计划,分发执行任务给 Worker 节点执行; Worker 节点负责实
际执行查询任务。 Worker 节点启动后向 Discovery Server 服务注册, Coordinator Discovery Server
得可以正常工作的 Worker 节点
缺点
No fault tolerance ;当一个 Query 分发到多个 Worker 去执行时,当有一个 Worker 因为各种原因查
询失败,那么 Master 会感知到,整个 Query 也就查询失败了,而 Presto 并没有重试机制,所以需要
用户方实现重试机制。
Memory Limitations for aggregations, huge joins ;比如多表 join 需要很大的内存,由于 Presto
纯内存计算,所以当内存不够时, Presto 并不会将结果 dump 到磁盘上,所以查询也就失败了,但
最新版本的 Presto 已支持写磁盘操作,这个待后续测试和调研。
MPP(Massively Parallel Processing ) 架构;这个并不能说其是一个缺点,因为 MPP 架构就是解决
大量数据分析而产生的,但是其缺点也很明显,假如我们访问的是 Hive 数据源,如果其中一台
Worke 由于 load 问题,数据处理很慢,那么整个查询都会受到影响,因为上游需要等待上游结果
hive 和presto的区别 Presto 安装部署与介绍

MapReduce Presto 的执行过程的不同点, MR 每个操作要么需要写磁盘,要么需要等待前一个 stage
部完成才开始执行,而 Presto SQL 转换为多个 stage ,每个 stage 又由多个 tasks 执行,每个 tasks 又将
分为多个 split 。所有的 task 是并行的方式进行, stage 之间数据是以 pipeline 形式流式的执行,数据之间
的传输也是通过网络以 Memory-to-Memory 的形式进行,没有磁盘 io 操作。这也是 Presto 性能比 Hive
很多倍的决定性原因
presto部署:


 里面有各种版本的presto  

例:
linux>wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.250/presto-server-0.250.tar.gz
linux>wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.250/presto-cli-0.250-executable.jar

解压到 mv 到  /opt/install/presto

linux>tar -xf presto-server-0.250.tar.gz
linux>mv presto-server-0.250 /opt/install/presto

创建目录:

linux>cd presto


linux>mkdir data
linux>mkdir etc

编辑配置文件

linux>cd etc
linux>vi jvm.config

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


linux/etc>mkdir catalog
linux/etc>cd catalog

linux/catalog>vi hive.properties

connector.name=hive-hadoop2    #hive-hadoop2 名字是固定的
hive.metastore.uri=thrift://192.168.58.201:9083
hive.config.resources=/opt/install/hadoop/etc/hadoop/core-site.xml,/opt/install/hadoop/etc/hadoop/hdfs-site.xml

分发到其他节点

linux>scp -r presto/ 192.168.58.201:`pwd`
linux>scp -r presto/ 192.168.58.202:`pwd`

在 presto的etc 目录下编辑文件

主机1:192.168.58.200
linux>vi  node.properties

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/install/presto/data

linux>vi config.properties

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://192.168.58.200:8881

主机2:192.168.58.201
linux>vi  node.properties

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/install/presto/data

linux>vi config.properties

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://192.168.58.200:8881

主机3:192.168.58.202
linux>vi  node.properties

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/install/presto/data

linux>vi config.properties
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://192.168.58.200:8881

启动 hive的服务  bin/hive --service metastore  (不行的话所有都启动)  因为 192.168.58.201 hive-site.xml 指定的是192.168.58.201 所以在这台上启动hive --service metastore

配置文件如下的hive:  vi   hive-site.xml

192.168.58.201>vi   hive-site.xml
<configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://nodefive:3306/hive?createDatabaseIfNotExist=true</value>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>root</value>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>12345</value>
        </property>
        <property>
     <name>hive.metastore.thrift.bind.host</name>
     <value>192.168.58.201</value>
    </property>
</configuration>

分别启动服务 :

进入presto运行
主机1:192.168.58.200
linux>bin/launcher run
主机2:192.168.58.201
linux>bin/launcher run
主机3:192.168.58.202
linux>bin/launcher run

presto 的客户端

linux>mv presto-cli-0.196-executable.jar prestocli
linux>chmod +x prestocli
进入客户端方法:
linux>./prestocli --catalog hive --schema default --server 192.168.58.200:8881 

linux>./prestocli --catalog hive --schema default --server 192.168.58.200:8881  --catalog hive --schema default

注:启动presto
 不加 --schema 的话就是全部数据库,查询时候需要用 数据库名.表名 的方式查询
例:
presto>select * from schema.table limit 100

进入后常用命令:
presto>show schemas查看数据库
presto>show tables from SchemaName; 查看 数据库的表
或者
presto>use SchemaName;
presto>show tables;  查看当下数据库下的所有表

注:命令跟hive差不多更多命令例子可参presto考官网
presto SQL应用官网:https://prestodb.io/docs/current/sql.html

presto SQL应用官网:https://prestodb.io/docs/current/sql.html

报错:

ERROR    main    com.facebook.presto.server.PrestoServer    Unable to create injector, see the following errors:

1) Error injecting constructor, java.io.IOException: java.io.IOException: Can not attach to current VM (try adding '-Djdk.attach.allowAttachSelf=true' to the JVM config)
Presto 安装部署与介绍

 解决办法:编辑jvm.config 文件添加配置-Djdk.attach.allowAttachSelf=true后重启presto服务

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-Djdk.attach.allowAttachSelf=true

打开浏览器输入地址192.168.58.200:8881即可访问UI

Presto 安装部署与介绍