presto的概况

presto的概况

Presto性质

分布式的SQL查询引擎,专门告诉实时的分析数据,他的产生解决了,hive的mr程序模型太慢
不能通过BI或者Dashboards直接展现HDFS数据等问题.
Presto是一个纯粹的内存计算引擎,不储存数据,通过Connector(类比mr中的inputformat组件)
获取第三方的储存服务数据.

Presto优点

1.ad_hoc(即席查询)期望查询时间秒级,
2.比hive快10倍
3.支持多种数据源,入hive,kafka,mysql,monogoDB,redis,jmx等等也可以自己实现连接
4.支持多种语言协议Python,Ruby,PHP,Node,jsJava.
5.支持jdbc/odbc连接
6.ANSI SQL,支持窗口函数,join,聚合,复杂查询等.
7.一条presto查询可以将多个数据源的数据源进行合并分析
8.presto是一个OLAP的工具,擅长对海量数据进行复杂的分析

Preso和Mysql比较

mysql是以个数据库,具有储存能力和计算分析能力,传统单点关系型数据库不能满足当前大数据量的需求.
presto只有计算分析能力,可以满足大量数据的分许计算.

Presto的优势

低延迟,高并发,相比hive,执行效率要高很多.
一个复杂的查询,hive要用十几秒,presto只用不到一秒.

Presto数据管理模型

presto使用catalog,schema和table这三层结构来管理数据.
catalog:就是数据源,hive,mysql都是数据源,可以连接多个hive和多个mysql,一个catalog可以包含多个schema
命令show catalogs命令看到presto连接的所有数据源.

schema相当于一个"库",一个schema包含多张数据表
命令show schemas from 'catalog_xx’可以列出catalog_xx,schema_yy下的所有表.

Table:"数据库"与一般的数据库表相同
命令show table from 'catalog_xx,schema_yy’可以查看catalog_xx,schema_yy下的所有表.

presto中定位一张表的全名,为数据源,数据库,数据表
例如:hive.db1.test,//hive(satalog)下的db1(schema)中test(表table).

Presto和hive比较

hive储存:借助外部储存,最主要的是hdfs
hvie计算:借助外部计算框架mr程序,spark程序,tez程序
presto储存:借助外部储存,而且可以在一条SQL中,综合多个数据源
presto计算:有自己内部实现的分布式计算机制,计算节点是常驻进程,计算过程尽量利用内存.
总结:presto比hive的速度快很多,能做到比较完美的近实时数据查询分析;

presto接入方式

以hive数据源为例,在中端输入:

[root@doit02 presto-server-0.229]#./presto-cli.jar --server doit01:9200 --catalog hive --user xx --source 'pf=adhoc;client=cli'
--server 是presto服务地址;
--catalog 是默认使用哪个数据源,后面也可以切换;
--user 是用户名;
--source 是代表查询来源,source设置格式为key=value形式(英文分号分割); 例如个人从command line查询应设置为pf=adhoc;client=cli。

进入终端后
查看数据源: show catalog;
查看数据库实例: show schemas;

presto执行速度快的原因

mr程序:每一个操作都需要写磁盘,一个stage(阶段)执行完才开始下一个stage,
presto:将SQL转换为多个stage,每一个stage又由多个task执行,所有的task都是并行的方式执行,
速度快的根本原因:数据之间的传输也是以pipeline形式流式的执行,通过memory-to-memory的形式进行的,没有io磁盘操作,

presto的缺点

1.no fault tolerance:不容错
2.Memory Limitations for aggregations, huge joins;对于运行内存有限制
3.MPP(Massively Parallel Processing )并行下游要等上游结果.

presto安装部署

官网"https://prestodb.io/
下载,解压,配置文件,配置hive数据源,配置mysql数据源,配置kafka两个格式csv和json数据源(比较复杂)

presto实战:
启动presto
1.启动hive元数据服务

[root@doit02 hive-2.3.1]# bin/hive --service metastore

2.启动presto的coordinator(协调器)

[root@doit02 presto-server-0.229]# bin/launcher start

3.启动presto的worker

[root@doitX presto-server-0.229]# bin/launcher  start

访问web端口:http://doit02:8083/ui/
下载客户端jar包:https://prestodb.io/download.html
第一种方式启动presto客户端
下载客户端jar包在linux端运行

[root@doit02 presto-server-0.229]# ./presto-cli  --server doit02:8083 --catalog hive --schema doit12
presto>use hive.yiee_dw//进入到hive中yiee_dw的工作
presto:yiee_dw>show tables;//列出这个库中所有的表
presto:yiee_dw>正常的hive select 语句

第二种方法JDBC客户端使用
就是在spark中导入依赖然后写spark程序连接元数据,
1.首先导入依赖

<dependency>
    <groupId>com.facebook.presto</groupId>
    <artifactId>presto-jdbc</artifactId>
    <version>0.229</version>
</dependency>

2.连接的参数

//  properties参数方式
String url = "jdbc:presto://h1:8080/hive/yiee_dw";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("SSL", "false");
Connection connection = DriverManager.getConnection(url, properties);

//  URL参数方式
String url = "jdbc:presto://example.net:8080/hive/sales?user=test&password=secret&SSL=true";
Connection connection = DriverManager.getConnection(url);
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
   int amt1 = rs.getInt(1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值