一 Presto 基本介绍
Presto 分成两个开源框架来维护
Prestodb由facebook维护 Prestosql (现在更名为trino)
两个框架的架构和原理基本一致,所以使用安装起来没有差别,1 Prestosql 社区更活跃,Prestodb由于公司维护更新较慢,2 Prestosql 解决了hive acid的问题这是我现在安装它的核心目的。
Presto 不仅支持hive,也支持kudu、kafka等多种组件
Presto 需要java11运行环境我在测试机已经安装两个java版本通过命名sudo update-alternatives --config java 来切换java版本,但我觉得可以将presto单独部署3台主机不与hdp放在同一主机上,因为Presto 需要比较大量的内存。
Datagrip最新版对presto连接支持
presto支持多种权限配置 推荐是LDAP+ https
二 操作测试
在测试机 8g内存装了3个工作节点
三 测试性能
dwd.dwd_bigdata_test 现有2002000条数据
1执行MR select count(*) from dwd.dwd_bigdata_test;
三次执行分别为977 ms、741 ms、761 ms
dwd.dwd_bigdata_test 现有16016000条数据
617、478、463 (官网说会把上次查询缓存,下次相同查询将会更加优化)
Hive 18 s 987、22 s 428、11 s 548
1执行插入
insert into dwd.dwd_bigdata_test
select * from dwd.dwd_bigdata_test
Presto 3 s 754 ms、4 s 893 ms(8008000)、8 s 737 ms(16016000); hive 59 s 77 ms
总结 速度大概在6倍左右,但是presto会随着数据量增大速度可能会快的20倍左右,而且presto不依赖yarn 对资源管控更方便
四 语法测试
基本语法一致(开窗,lag,lead,rand(),current_date)
区别coalesce()替换nvl(); date_add(‘day’,-1,current_date) 天数加减一,date_add(‘month’,1,current_date)
月份加一,date_diff(‘day’, current_date, cast (‘2021-10-01’ as date ))相差多少天、、、
创建临时表不支持
drop table temp_test;
create table hive.dwd.temp_test as
select * from dwd.dwd_order_his
只能真正的创建表
权限控制
框架提供了大量的权限控制方案。测试了下文件系统访问控制 配置
rules.json 对全局用户的权限
{
“catalogs”: [
{
“user”: “admin”,
“catalog”: “(hive|system)”,
“allow”: true
},
{
“user”: “public”,
“catalog”: “hive”,
“allow”: true
},
{
“catalog”: “system”,
“allow”: false
}
]
}
{
“catalogs”: [
{
“user”: “admin”,
“catalog”: “(hive|system)”,
“allow”: true
},
{
“user”: “public”,
“catalog”: “hive”,
“allow”: true
},
{
“catalog”: “system”,
“allow”: false
}
]
}
hive-security.json 针对hive连接可以把权限控制到表的查询,字段的细粒度控制,但是密码设置方案还需研究
{
“schemas”: [
{
“user”: “admin”,
“schema”: “.",
“owner”: true
},
{
“user”: “public”,
“schema”: “dwd”,
“owner”: false
}
],
“tables”: [
{
“user”: “admin”,
“privileges”: [“SELECT”, “INSERT”, “DELETE”, “UPDATE”, “OWNERSHIP”]
},
{
“user”: “public”,
“table”: "(big|dwd).”,
“privileges”: [“SELECT”]
}
]
}