数据分析引擎Presto

一、什么是presto及体系架构

在这里插入图片描述
Presto与hbase的架构特别相似。都是主从架构思想。由于我们使用的hive只是把sql语句翻译成MapReduce,然后再交给yarn去执行,我们都知道,yarn执行过程中,会产生数据落地,进而影响效率。因此我们通常用presto与hive做一个集成,presto是完全内存计算,presto集成hive就是去hive中元数据,当presto拿到hive的所有元数据后,就是拿到所有的表在hdfs的存储位置,进而基于内存运算的数据源就是在hdfs上。
Presto查询引擎是一个主从的架构,由一个Coordinator(调解员/主节点)节点,coordinator在启动的时候会启动一个内嵌的发现服务(Discovery Server),coordinator可以通过个发现服务知道有多少worker节点,而worker节点可以通过这个发现服务知道coordinator是谁,Discovery Server通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。如果配置了Hive Connector,需要配置一个Hive MetaStore服务为Presto提供Hive元信息,Worker节点与HDFS交互读取数据。

二、presto执行查询过程

流水线工作方式
用户使用Presto Cli提交一个查询语句后,Cli使用HTTP协议与Coordinator通信,Coordinator收到查询请求后调用SqlParser解析SQL语句得到Statement对象,并将Statement封装成一个QueryStarter对象放入线程池中等待执行。
在这里插入图片描述

Presto SQL的执行流程如下图所示

  • 1、Cli通过HTTP协议提交SQL查询之后,查询请求封装成一个SqlQueryExecution对象交给Coordinator的SqlQueryManager#queryExecutor线程池去执行
  • 2、每个SqlQueryExecution线程(图中Q-X线程)启动后对查询请求的SQL进行语法解析和优化并最终生成多个Stage的SqlStageExecution任务,==每个SqlStageExecution任务仍然交给同样的线程池去执行。==是不是说明,每个sqlstageexecution包含多个任务。
  • 3、每个SqlStageExecution线程(图中S-X线程)启动后每个Stage的任务按PlanDistribution属性构造一个或者多个RemoteTask通过HTTP协议分配给远端的Worker节点执行
  • 4、Worker节点接收到RemoteTask请求之后,启动一个SqlTaskExecution线程(图中T-X线程)将这个任务的每个Split包装成一个PrioritizedSplitRunner任务(图中SR-X)交给Worker节点的TaskExecutor#executor线程池去执行
  • 在这里插入图片描述
    这个执行过程和spark有点相似。只不过presto是基于流水线执行,所有资源事先分配好,又有点和Strom相似。

三、安装与使用presto

1、解压

tar -zxvf presto-server-0.217.tar.gz 

2、创建一个目录

mkdir etc    ----> 保存所有的配置文件

并且我们将配置一下文件

① Node Properties: 节点的配置信息
② JVM Config: 命令行工具的JVM配置参数
③ Config Properties: Presto Server的配置参数
④ Catalog Properties: 数据源(Connectors)的配置参数
⑤ Log Properties:日志参数配置

3、vi node.properties

#集群名称。所有在同一个集群中的Presto节点必须拥有相同的集群名称。
node.environment=production
		 
#每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 
		 
# 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据存储在这个目录下。
node.data-dir=/usr/local/presto/presto-server-0.217/data

4、vi jvm.config

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

5、vi config.properties

5.1、单节点配置

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://192.168.92.111:8080

5.2、集群配置

  • coordinator的配置
coordinator=true
node-scheduler.include-coordinator=false
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://192.168.92.111:8080
  • workers配置
coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
#主节点
discovery.uri=http://192.168.92.111:8080

6、vi log.properties

com.facebook.presto=INFO

7、vi hive.properties

集成Hive:创建catalog

mkdir /usr/local/presto/presto-server-0.217/etc/catalog
#注明hadoop的版本
connector.name=hive-hadoop2
		 
#hive-site中配置的地址
hive.metastore.uri=thrift://192.168.92.111:9083
	 
#hadoop的配置文件路径
hive.config.resources=/usr/local/hadoop/hadoop-3.1.2/etc/hadoop/core-site.xml,/usr/local/hadoop/hadoop-3.1.2/etc/hadoop/hdfs-site.xml

==注意:==要访问Hive的话,需要将Hive的MetaStore启动:hive --service metastore,并且MySQL也要启动,因为hive的元信息保存在MySQL上面。

8、启动Presto Server

在home目录下

bin/launcher start

9、运行presto-cli

下载:presto-cli-0.217-executable.jar
重命名jar包,并增加执行权限

cp presto-cli-0.217-executable.jar presto 

chmod a+x presto
连接Presto Server

./presto --server localhost:8080 --catalog hive --schema default	

之后的操作是sql语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值