Linux

您所在的位置:网站首页 presto安装包 Linux

Linux

2024-02-01 14:02| 来源: 网络整理| 查看: 265

1.Presto简介

Presto是Facebook推出的一个基于Java开发的大数据分布式SQL查询引擎,可对从数 G 到数 P 的大数据进行交互式的查询,查询速度快(据称性能是hive的10倍以上),Presto 的目标是在可期望的响应时间内返回查询结果,单个 Presto 查询可合并来自多个数据源的数据进行统一分析。

适合场景:PB级海量数据复杂分析,交互式SQL查询,⽀持跨数据源查询 不适合场景:多个大表的join操作,因为presto是基于内存的,join操作输入小但产生的中间数据大,在内存里可能放不下 与Hive的区别: (1)hive是一个数据仓库,提供存储服务,但只能访问HDSF的数据,presto是一个分布式的查询引擎,并不提供数据的储存服务,为此,presto是一个插拔式的设计思路,支持多种数据源,包括hive,hdfs,mysql,等。 (2)两者的基本架构 hive的基本架构: 在这里插入图片描述 hive:Client将查询请求发送到hive Service,它会和Metastor交互,获取表的源信息(如表的位置结构)之后Hive Service会进行语法分析,解析成语法树,变成查询计划,进行优化后将查询计划交给执行引擎(默认是Map reduce),然后翻译成Map Reduce任务来运行。

Presto:presto是在它内部做hive类似的逻辑 在这里插入图片描述

1. 2 Presto内部架构

在这里插入图片描述 Presto查询引擎是一个Master-Slave的架构模式,由三部分组成: 1.一个 coordinator 2.一个discovery server 3.多个worker

coodinator:用于解析查询sql,生成执行计划,并分发给worker执行。discovery server:通常内嵌与Coordinator节点中,worker上线后,向discovery server注册。coodinator分发任务前,需要向discovery server获取可以正常工作worker列表。worker:具体执行任务的工作节点。 presto可以借助hive的元信息找到hdfs上的节点。 1.3 Presto中SQL运行流程

在这里插入图片描述 step1:当我们执行一条sql查询,coordinator接收到这条sql语句以后,它会有一个sql的语法解析器去把sql语法解析变成一个抽象的语法树(AST),这抽象的语法树它里面只是进行一些语法解析,如果你的sql语句里面,比如说关键字你用的是int而不是Integer,就会在语法解析这里给暴露出来 step2:2、如果语法是符合sql语法规范,之后会经过一个逻辑查询计划器的组件,他的主要作用是,比如说你sql里面出现的表,他会通过connector的方式去meta里面把表的schema,列名,列的类型等,全部给找出来,将这些信息,跟语法树给对应起来,之后会生成一个物理的语法树节点,这个语法树节点里面,不仅拥有了它的查询关系,还拥有类型的关系,如果在这一步,数据库表里某一列的类型,跟你sql的类型不一致,就会在这里报错. step3:如果通过,就会得到一个逻辑的查询计划,然后这个逻辑查询计划,会被送到一个分布式的逻辑查询计划器里面,进行一个分布式的解析,分布式解析里面,他就会去把对应的每一个查询计划转化为task step4:在每一个task里面,他会把对应的位置信息全部给提取出来,交给执行的plan,由plan把对应的task发给对应的worker去执行,这就是整个的一个过程,与hive默认的引擎Mapreduce相比,presto将数据放在内存中,task之间进行数据shuffle时,直接从内存里处理,所以很快。

2 .安装

Presto的安装基本环境

Linux或Mac OS X.Java 8,64位Python 2.4+ 连接器: Presto支持从以下版本的Hadoop中读取Hive数据:支持以下文件类型:Text, SequenceFile, RCFile, ORC Apache Hadoop 1.x (hive-hadoop1) Apache Hadoop 2.x (hive-hadoop2) Cloudera CDH 4 (hive-cdh4) Cloudera CDH 5 (hive-cdh5) Cloudera CDH5安装文档: 集群规划: centos_master ( 192.168.91.128) : 调度节点 centos_salve1 (192.168.91.129) : worker节点 centos_salve2 (192.168.91.130) : worker节点 2.1 安装JDK1.8

这里安装的是JDK1.8-1.8.0_202 64位,presto-server-0.216需要1.8.0_151+版本的,如果默认的版本低于1.8.0_151,则启动presto时修改Java的临时环境变量(临时环境变量只在本终端有效,不影响Java的默认版本),修改方式请查看后面的 [2.3.6 测试presto的单机版] 内容。

[centos@localhost catalog]$ java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) [centos@localhost catalog]$ 2.2 python

一般的系统会自带python,我用的是Centos6.5,自带Python2.6

[centos@localhost catalog]$ python -V Python 2.6.6 [centos@localhost catalog]$ 2.3 安装presto

将下载好的安装包上传到linux新建的Presto文件夹下,然后解压

[centos@localhost catalog]$ tar zxvf presto-server-0.216.tar.gz

在下面创建etc目录

[centos@localhost presto-server-0.216]$mkdir etc [centos@localhost etc]$ls bin etc lib NOTICE plugin README.txt [centos@localhost etc]$ cd etc [centos@localhost etc]$ touch node.properties jvm.config config.properties log.properties [centos@localhost etc]$ mkdir catalog [centos@localhost etc]$ cd catalog [centos@localhost catalog]$ touch jmx.properties

Presto需要一个用于存储日志、本地元数据等的数据目录。建议在安装目录的外面创建一个数据目录。

[centos@localhost Presto]$ mkdir prestoData [centos@localhost Presto]$ ls prestoData presto-server-0.216 presto-server-0.216.tar.gz [centos@localhost Presto]$

以上在是在etc中创建的Presto的所有配置文件,这些文件的内容是:

node.properties:每个节点的环境变量配置jvm.config:jvm参数 ,Java虚拟机的命令行选项config.properties:Presto 服务配置log.properties:Server参数 ,允许你根据不同的日志结构设置不同的日志级别catalog:每个连接者配置(data sources) 2.3.1、配置node.properties

node.properties节点属性配置文件:etc/node.properties包含针对于每个节点的特定的配置信息。这份配置文件一般情况下是在Presto第一次安装的时候,由部署系统创建的。 一个etc/node.properties配置文件至少包含如下配置信息: node.environment: 环境的名称。所有在同一个集群中的Presto节点必须拥有相同的环境的名称,建议环境名称直接用presto。 node.id: 每个Presto节点的唯一标示符。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。 node.data-dir: 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据和日志存储在这个目录下。

node.environment=presto node.id=presto_f1 node.data-dir=/home/centos/software/Presto/prestoData 2.3.2、配置jvm.config:

JVM配置文件,etc/jvm.config,包含一系列在启动JVM的时候需要使用的命令行选项。 这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理。

-server -Xmx8G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError 2.3.3、配置config.properties:

Presto的配置文件:etc/config.properties 包含了Presto server的所有配置信息。 每个Presto server既是一个coordinator也是一个worker。但是在大型集群中,处于性能考虑,建议单独用一台机器作为 coordinator。

coordinator=true node-scheduler.include-coordinator=false #单机版的此处为true query.max-memory=2GB query.max-memory-per-node=1GB http-server.http.port=9999 discovery-server.enabled=true discovery.uri=http://192.168.91.128:9999

coordinator:允许此Presto实例充当协调器(接受来自客户端的查询请求并管理查询执行过程) node-scheduler.include-coordinator:是否允许在coordinator上安排工作,对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用时大部分的资源都会被worker占用,就不会有足够的资源进行关键任务调度、管理和监控查询执行。 http-server.http.port:指定HTTP服务器的端口,presto使用 HTTP进行内部和外部的所有通讯 query.max-memory:一个单独的任务使用的最大内存(一个查询计划的某个执行部分会在一个特定的节点上执行)。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。 query.max-memory-per-node:查询任务在任何一台机器上可以使用的最大用户内存 discovery-server.enabled:Presto 通过Discovery服务来找到集群中所有的节点。每一个Presto实例都会在启动的时会在到discovery服务上注册。Prestocoordinator可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP 服务,因此使用同样的端口。 discovery.uri:Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Prestocoordinator的uri。修改example.net:9098,根据你的实际环境设置该URI。注意:这个URI一定不能以“/“结尾。

2.3.4、配置log.properties:

日志级别分为:DEBUG, INFO, WARN and ERROR。 com.facebook.presto=INFO

2.3.5、配置Catalog Properties:

Presto通过connectors访问数据。这些connectors挂载在catalogs上。connector可以提供一个catalog中所有的schema和表。 例如: Hive connector 将每个hive的database都映射成为一个schema, 所以如果hive connector挂载到了名为hive的catalog, 并且在hive的web有一张名为clicks的表, 那么在Presto中可以通过hive.web.clicks来访问这张表。 通过在etc/catalog目录下创建catalog属性文件来完成catalogs的注册。

vim catalog/jmx.properties connector.name=jmx

至此etc下的所有配置文件就完成了

[centos@centos_master etc]$ ls catalog config.properties jvm.config log.properties node.properties [centos@centos_master etc]$ 2.3.6 测试presto的单机版(只有coordinator节点)是否安装成功

启动前修改Java的临时环境变量: 1.用whereis java,java -version,查看linux都有那些版本的java

[root@utility ~]# whereis java java: /usr/bin/java /usr/lib/java /etc/java /usr/local/java /usr/share/java /app/ins/jdk1.8.0_171/bin/java /usr/share/man/man1/java.1.gz [root@utility ~]# /usr/bin/java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode) [root@utility ~]#

/usr/bin/java下是 1.8.0_191版本,在 vim presto/bin/launch 中增加一下内容:

export JAVA_HOME=/usr/bin/java export PATH=$JAVA_HOME:$PATH

在这里插入图片描述 保存并退出。 启动presto:

[centos@centos_master bin]$ ./launcher start Started as 4028

查看presto状态

[centos@centos_master bin]$ ./launcher status Running as 4028

停止presto

[centos@centos_master bin]$ ./launcher stop Stopped 4028 [centos@centos_master bin]$

web端访问:http://192.168.91.128:9999 (config.properties文件中配置的discovery.uri=http://192.168.91.128:9999 ) 在这里插入图片描述 此时works数是零,因为只有调节节点。

2.3.7 配置presto集群:

将此机器中的presto文件夹远程拷贝到centos_salve1,centos_salve2中。 1.修改centos_salce1,centos_salce2 的config.properties: [centos@centos_salve2 etc]$ vim config.properties

coordinator=false #work节点的为false,否则节点启动不了. http-server.http.port=9999 query.max-memory=1GB discovery.uri=http://192.168.91.128:9999

2.修改centos_salce1,centos_salce2 的node.properties [centos@centos_salve2 etc]$ vim node.properties

node.environment=presto node.id=presto_f2 #三台机器三个node_id node.data-dir=/home/centos/software/Presto/prestoData 2.4 启动Presto集群

分别在centos_master,centos_salve1,centos_salve2安装目录的bin目录下运行 launcher start

注:如果centos_salve1,2上启动时报 : Path exists and is not a symlink:/home/centos/software/Presto/prestoData/etc 则将prestoData下的所有文件删除。

[centos@localhost presto-server-0.216]$ ls bin etc lib NOTICE plugin README.txt [centos@localhost presto-server-0.216]$ cd bin [centos@localhost bin]$ ls launcher launcher.properties launcher.py procname [centos@localhost bin]$ ./launcher start Started as 26540 [centos@localhost bin]$

查看状态

[centos@localhost bin]$ ./launcher status Running as 26540 [centos@localhost bin]$

停止presto

[centos@localhost bin]$ ./launcher stop Stopped 26540 [centos@localhost bin]$

注:有时work节点启动后自动断掉,presto的日志存在按装路径以外的prestoData文件的var/log/service.log和launcher.log中,根据日志查看原因 我的是因为,centos_salve1,2的/etc/hosts不合适,正确的是三台机器的ip,hostname都要有 192.168.91.128 centos_master 192.168.91.130 centos_salve2 192.168.91.129 centos_salve1

启动presto后的web页面访问:http://192.168.91.128:9999 (config.properties文件中配置的discovery.uri=http://192.168.91.128:9999 ) 在这里插入图片描述 至此presto的集群安装完成,接下来看看怎么使用

3. 登陆presto

使用 presto 命令行接口登录,Presto CLI为用户提供了一个用于查询的可交互终端窗口。CLI是一个可执行 JAR文件, 这也就意味着你可以像UNIX终端窗口一样来使用CLI。 下载 presto-cli-0.175-executable.jar 连接地址为 https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.176/presto-cli-0.176-executable.jar, 重名名为 presto 放到presto/bin/ 目录下, 使用 chmod +x 命令设置可执行权限,然后执行:

[root@utility bin]#$ ./presto --server 10.0.10.82:9098 --catalog hive presto> show schemas; #查看数据库 presto> use default; presto:default> show tables; #查看表 4. presto连接各数据库 4.1 连接hive

在presto-server-0.216/etc/catalog下创建hive.properties文件,包含信息如下:

connector.name=hive-hadoop2 hive.metastore.uri=thrift://192.168.1.234:9083 hive.config.resources=/home/hadoop/software/jise/jise-server/conf/core-site.xml,/home/hadoop/software/jise/jise-server/conf/hdfs-site.xml #没有这个也可以 hive.allow-drop-table=true

配置项解释: hive.metastore.uri 内容对应 hive-site.xml 中添加的hive.metastore.uris配置:

hive.metastore.local false hive.metastore.uris thrift://192.168.1.234:9083 hive.config.resources 对应hdfs 的 core-site.xml 和 hdfs-site.xml 文件

[root@utility bin]#$ ./presto --server 10.0.10.82:9098 --catalog hive

4.2 连接mysql

在presto-server-0.216/etc/catalog下创建mysql.properties文件,包含信息如下:

connector.name=mysql connection-url=jdbc:mysql://utility:3306 connection-user=root connection-password=root

[root@utility bin]#$ ./presto --server 10.0.10.82:9098 --catalogmysql

presto> show schemas; Schema activity_monitor am amon

Reference(尊重原创): EN官网:https://prestodb.io/ CN官网:http://prestodb-china.com/ GitHub:https://github.com/prestodb/presto 速查手册:http://prestodb-china.com/docs/current/index.html Presto架构:https://blog.csdn.net/sunyaowu315/article/details/83177185 Presto连接数据源:https://blog.csdn.net/Kohang/article/details/73496589



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3