Monthly Archives: November 2013

Hive Impala Presto, comparison of performance

测试环境如下:

presto-env
其中关于impala和Presto的内存配置:

  • Impala Daemon 内存限制mem_limit为1GB
  • Presto的config.properties 配置文件中task.max-memory=1GB。

另外,由于内存有限,每次测试时Impala和Presto都没有同时开启。
总体测试表明,Presto的性能比Impala稍逊,在数据量巨大、查询比较复杂时,Impala和Presto的性能表现都不怎么样,比Hive也就快了2、3倍的样子
由于生产环境下,除了性能之外,还有并发度、稳定性、适应性等多种因素需要考虑,所以以上测试结果仅供参考。
以下是具体测试结果:

一、1百万条记录,HDFS文件大小600MB时的查询速度

在表记录数不多时,Impala和Presto都表现出比较好的查询性能,其中Impala的查询效率大约为Hive的9~50倍,Presto的查询效率大约为Hive的8~??倍(由于Presto的查询时间只精确到秒,在最简单的select * from xxx limit 5的查询中,显示时间为0秒)。
presto600mb

二、1千万条记录,HDFS文件大小6GB时的查询速度

在表记录数比较多时,Impala的查询效率大约为Hive的7~10倍,Presto的查询效率大约为Hive的4~30倍。
persto6gb

三、1亿条记录,HDFS文件大小60GB时的查询速度

在表记录数特别多时,Impala的查询效率大约为Hive的3~60倍,Presto的查询效率大约为Hive的2~180倍。
presto60gb


Data Warehouse For Ever原创文章,转载请注明出处

Hive Impala Presto, comparison of functionality

√: Yes; ×: No; Blue: The main differences between impala and presto

hive 0.11 impala 1.1.1 presto 0.52
Implement: java c++ backend
java frontend
java
DataType:
integer
string
floating point
timestamp
uniontype × ×
DDL:
create/alter/drop table ×
create view ×
truncate table × ×
desc
create index × ×
DML:
load data ×
insert ×
explain
tablesample × ×
group by
order by
having
limit
inner/left/right/full join (no full join)
union
Sub Queries
With
Lateral View × ×
Function:
UDF × ×
Mathematical Functions √31 √30 √31
String Functions √37 √22 √15
Date and Time Functions √17 √18 √26
Regex
Type Conversion Functions ×
Conditional Functions
Aggregate Functions √19 only 5 √16
Windowing ×
Distinct
Url
Json ×

功能上,Presto和Impala有几个不同的地方,也有和Impala相同的一些缺陷:
1. Presto完全没有数据写入的功能,不能建表、建视图、导数据,只能做select查询操作。
2. Presto不支持Full Outer Join。
3. Presto和Impala一样,都不支持UDF。
4. Presto支持窗口函数,而Impala不支持,不过Impala的开发团队号称明年推出基础的rank over partition 等功能。
5. Presto支持较多的聚合函数,而Impala目前只支持5个非常基础的聚合函数:MAX(), MIN(), SUM(), AVG(), and COUNT()。


Data Warehouse For Ever原创文章,转载请注明出处

Presto的单节点和多节点配置

近期在测试机上搭了一套impala和presto的测试环境,因为presto的文档资料比较少,配置时走过一些弯路,因此将我的配置给大家说一下,希望对想研究presto的同学能有些帮助。
Presto的架构,在官网上有介绍,我将官网的架构图稍微修改了一下,增加了Discovery的服务,这样可能看起来会更清楚一些。

下面分别说一下单节点和多节点的配置。

一、Presto单节点配置

首先,我在我的机器上安装了Cloudera Manger 4,部署了CDH HDFS、Hive和Impala。配置的过程很简单,因为Cloudera Manger还是很强大且方便的。
然后,我在这台单机上部署了Presto的单节点测试环境。

需要注意的是Presto只能支持jdk 1.7,因此必须安装好jdk 1.7,并配置好环境变量PATH和CLASSPATH,保证java 1.7在PATH路径中,保证Presto的lib在CLASSPATH路径中。

要下载的软件有两个:

  1. Presto server 0.52
  2. Presto client

进入server的目录,按照官网说明Deploying Presto创建etc文件夹和配置文件,由于是单机同时作为coordinator和workder,因此config.properties配置如下:

coordinator=true
datasources=jmx,hive
http-server.http.port=8080
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://v125203052.bja:8080

因为Presto的coordinator集成了一个简单的discovery服务,其端口号与Presto服务端口号8080一致,因此单节点不需要单独部署Discovery服务。
启动Presto客户端执行查询:
./presto --server v125203052.bja:8080 --catalog hive --schema default

二、Presto多节点配置

我在三台虚拟机上搭建了三个节点的测试环境,使用了Cloudera Manger 4进行了部署,我说一下这三台机器承担的主要角色吧:

  1. vm1:Presto Coordinator & Worker,Discovery Server,HDFS NameNode,HDFS DataNode,HDFS Balancer,Hive Metastore Server,Hive Gateway,Impala deamon,Impala StateStore Daemon,JobTracker,TaskTracker
  2. vm2:Presto Worker,HDFS DataNode,HDFS Gateway,Hive Gateway,Impala deamon,TaskTracker
  3. vm3:Presto Worker,HDFS DataNode,HDFS Gateway,Hive Gateway,Impala deamon,TaskTracker

同样,需要注意的是Presto只能支持jdk 1.7,因此必须安装好jdk 1.7,并配置好环境变量PATH和CLASSPATH,保证java 1.7在PATH路径中,保证Presto和Discovery的lib在CLASSPATH路径中。

在原来的服务器vm1上,还得安装一个Discovery Service,服务的配置与官方保持一致,端口为8411。先启动Discovery服务。
而Presto各个服务器上的配置注意事项有:

  1. node.id务必配置正确,各个服务器要不一样的node.id,可以在每个服务器上使用uuidgen命令生成一个id。
  2. 各个Presto服务的config.properties配置文件中,discovery.uri参数必须都指向discovery服务的地址。
  3. 原来Presto服务的config.properties配置文件中,discovery-server.enabled这一行必须注释掉。

以下是我的三个Presto服务的config.properties配置:

  • 1.vm1的config.properties配置:
  • coordinator=true
    datasources=jmx,hive
    http-server.http.port=8080
    presto-metastore.db.type=h2
    presto-metastore.db.filename=var/db/MetaStore
    task.max-memory=1GB
    discovery.uri=http://v125203052.bja:8411

  • 2.vm2和vm3的config.properties配置:
  • coordinator=false
    datasources=jmx,hive
    http-server.http.port=8080
    presto-metastore.db.type=h2
    presto-metastore.db.filename=var/db/MetaStore
    task.max-memory=1GB
    discovery.uri=http://v125203052.bja:8411

Now you can start the Presto client and execute the query:
./presto --server v125203052.bja:8080 --catalog hive --schema default
The output will be like these:

presto:default> select * from ljp limit 5;
a | b
—+——
0 | test
0 | test
1 | test
0 | test
1 | test
(5 rows)

Query 20131114_061434_00005_qcu94, FINISHED, 3 nodes
Splits: 12 total, 7 done (58.33%)
0:00 [42K rows, 337KB] [109K rows/s, 871KB/s]

And then, congralutions, let’s enjoy the Presto!!!


Data Warehouse For Ever原创文章,转载请注明出处