概述内容
(1)简介
(2)Hive and Prestodb, comparison of functionality
(3)Hive and Prestodb, comparison of performance
(1)简介
Presto是由facebook开发的一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。
Presto框架图如下:
下面的架构图中展现了简化的Presto系统架构。客户端(client)将SQL查询发送到Presto的协调员(coordinator)。协调员会进行语法检查、分析和规划查询计划。计划员(scheduler)将执行的管道组合在一起,将任务分配给那些里数据最近的节点,然后监控执行过程。客户端从输出段中将数据取出,这些数据是从更底层的处理段中依次取出的。
Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务,一个接着一个地运行。每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。然而Presto引擎没有使用MapReduce。它使用了一个定制的查询和执行引擎和响应的操作符来支持SQL的语法。除了改进的调度算法之外,所有的数据处理都是在内存中进行的。不同的处理端通过网络组成处理的流水线。这样会避免不必要的磁盘读写和额外的延迟。这种流水线式的执行模型会在同一时间运行多个数据处理段, 一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。这样的方式会大大的减少各种查询的端到端响应时间。
(2)Hive and Prestodb, comparison of functionality
√: Yes; ×: No; Blue: The main differences between hive and presto
hive 0.11.0 |
presto 0.56 |
|
Implement |
Java |
Java |
DataType |
||
integer |
√ |
√ |
string |
√ |
√ |
floating point |
√ |
√ |
boolean |
√ |
√ |
map |
√ |
√ |
list |
√ |
√ |
struct |
√ |
√ |
uniontype |
√ |
× |
timestamp |
√ |
√ |
DDL(数据定义语言) |
||
create/alter/drop table |
√ |
× |
create view |
√ |
× |
truncate table |
√ |
× |
desc |
√ |
√ |
create index |
√ |
× |
DML(数据操作语言) |
||
load data |
√ |
× |
insert |
√ |
√ |
explain |
√ |
√ |
tablesample(基于column做bucket) |
√ |
√ |
group by |
√ |
√ |
order by |
√ |
√ |
having |
√ |
√ |
limit |
√ |
√ |
inner/left/right/full join |
√ |
√ |
union |
√ |
√ |
sub queries |
√ |
√ |
Enhanced Aggregation, Cube, Grouping and Rollup |
√ |
× |
lateral view |
√ |
× |
Function |
|
|
UDF |
√ |
× |
Mathematical Functions |
√ |
√ |
String Functions |
√ |
√ |
Date and Time Functions |
√ |
√ |
Regex |
√ |
√ |
Type Conversion Functions |
√ |
× |
Conditional Functions |
√ |
√ |
Aggregate Functions |
√ |
√ |
Windowing |
√ |
√ |
Distinct |
√ |
√ |
Url |
√ |
√ |
Json |
√ |
√ |
功能上,Presto与Hive有几个不同的地方,也可以说是Presto功能不完善,毕竟Presto推出时间不长,详见如下:
1. Presto完成没有数据写入功能,不能使用create语句建表(可通过CREATE TABLE tablename AS query),建立视图、导数据。
2. Presto不支持UDF(用户自定义函数)。
3. Presto支持窗口函数,但比Hive相对较少。
(3)Hive and Prestodb, comparison of performance
测试环境如下:
由于部分机器涉及应用,暂用4台机器作为prestodb的集群,prestodb所有运算都在内存,所以配置大内存有助于提高prestodb的运算速度(现配置4G)。
以下为具体的测试结果:
记录数:169984827 |
||
DML |
Hive(s) |
Prestodb(s) |
limit |
5.493 |
0.05 |
where |
49.255 |
0.05 |
count(*) |
184.974 |
86 |
group by |
161.633 |
110 |
sub queries |
105.686 |
0.09 |
join |
657.006 |
177 |
注:prestodb查询时间只精确到秒,后带小数忽略
参考资料
Prestodb官网:http://prestodb.io/
相关推荐
京东在使用PrestoDB的过程中进行了详细的性能测试,并与传统数据库系统进行了比较。通过对10GB数据量下的12个实际业务场景进行测试,PrestoDB展现出了优异的性能表现。此外,京东还针对PrestoDB进行了一系列的功能...
### Facebook Presto 研究与性能测试 #### 一、概述 Presto是一款由Facebook开源的分布式SQL查询引擎,旨在实现对大规模数据集的高效查询。它不仅能够访问HDFS,还支持多种数据源,如RDBMS、Cassandra等。Presto的...
据称该引擎的性能是 Hive 的 10 倍以上。 PrestoDB 是 Facebook 推出的一个大数据的分布式 SQL 查询引擎。可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别。 Presto 可以查询包括 ...
主题:PrestoDB在京东的应用实践 演讲人:吕信,京东商城集团运维...演讲介绍:PrestoDB的基础架构和原理、PrestoDB与Hive在实际业务中的性能对比、京东集团对PrestoDB所做的改造、优化以及PrestoDB在京东的应用实践。
Airpal 是一个基于 Web 的查询执行工具,利用 Facebook 的 PrestoDB 进行查询和获取结果。提供了查找表、元数据、浏览数据行,编写和执行查询的功能,这些功能全部通过浏览器完成。一旦查询开始执行,用户可跟踪查询...
"prestodb-presto-go-client"是其中一个优秀的开源项目,专注于为Presto数据库提供Go语言的客户端库。本文将深入探讨这个项目的背景、功能、使用方法以及其在实际开发中的应用。 Presto是一个高性能、分布式SQL查询...
- **性能测试**:除了功能测试外,还需要进行性能基准测试,以评估系统在高负载下的表现,这通常通过另一套工具——Benchto来实现。 #### Tempto简介 - **端到端的产品测试框架**:Tempto被设计用于进行端到端的...
docker-prestodb 这是具有映像。 注意:从标签325开始,它开始将基本映像从openjdk切换到正式的prestosql容器映像 。 建造 运行以下命令以使用prestodb版本347和Db2连接器构建映像: docker build --build-arg ...
PyPresto PyPresto是客户端协议实现 。 Presto是用于大数据的分布式SQL查询引擎。 该客户端实现异步调用,并对结果集进行基本配置。 很抱歉缺少文档,以后我会尝试制作一个更全面的版本。 要求 ...
PhpPresto客户端连接到 PrestoDB 服务器的简单 Php 类,该服务器针对 Hadoop HDFS 集群运行分布式查询。 Presto 使用 SQL 的子集作为其查询语言。 Presto 是 Hadoop-Hive 或 Impala 的替代方案。用法有关如何使用它...
官网:https://prestodb.io/ Presto架构 Presto由一个coordinator和多个worker组成 Presto优缺点 优点 1.基于内存计算,减少了磁盘IO,计算更快 2.能够连接多个数据源,跨数据源连表查,如从hive查询大量网站访问记录,...
安装 $ pip install presto-python-client快速开始使用DBAPI接口查询Presto: import prestodbconn = prestodb . dbapi . connect ( host = 'localhost' , port = 8080 , user = 'the-user' , catalog = 'the-...
Nim语法简洁且类似Python,但具备C/C++的性能,支持生成C、C++或JavaScript代码,这使得它能够在多种平台上运行,并能轻松地与现有的C库集成。 nimPresto连接器的实现基于Nim的异步I/O模型,这允许非阻塞的数据库...
这在使用PrestoDb对Hazelcast上运行SQL查询实验。 它启动一个 PrestoDb 服务器和一个嵌入式 Hazelcast 实例。 连接器用于查询地图,就像它们是表一样。 地图中的对象被视为行。用法使用 gradle (2+) 启动服务器。 ...
下载并安装presto数据库/ sql驱动程序: go get github.com/prestodb/presto-go-client/presto 确保已在$ PATH中安装了Git。用法该Presto客户端是Go的database/sql/driver接口的实现。 为了使用它,您需
我们的性能比其他开放源代码版本的HBase连接器快10到100倍。性能比较环境细节资料大小事件表包含500万条记录和90个字段工人3 硬件16个逻辑核心64GB内存(分别为Presto和HBase 16GB内存)4T * 2硬盘 详细信息: : ...
网关用于presto计算引擎的负载均衡器/代理/网关。如何设置开发环境第1步:设置mysql。 首次设置时,安装docker并运行以下命令: docker run -d -p 3306:3306 --name mysqldb -e MYSQL_ROOT_PASSWORD=root123 -e ...
Presto是用于大数据的分布式SQL查询引擎。 环境要求: Mac OS X或Linux Java 8 Update 151或更高...Presto有一套全面的单元测试,可能需要几分钟才能运行。您可以在构建时禁用测试: ./mvnw clean install -DskipTests
Presto Presto is a distributed SQL query engine for big data. See the for deployment instructions and end user documentation. Requirements Mac OS X or Linux Java 8 Update 151 or higher (8u151+), 64-...