presto有2个社区,一个是PrestoDB(由Facebook员工维护,版本号是0.xxx),一个是PrestoSQL(由一些离开Facebook的Presto主力开发者维护,版本号是xxx,PrestoSQL 从版本 351 开始将其名称变更为 Trino)
社区版本 | 官网 | 安装包下载地址 | 版本号 | 安装文档 |
---|---|---|---|---|
PrestoDB | https://prestodb.io/ | https://repo1.maven.org/maven2/com/facebook/presto/ | 0.xxx(比如0.245) | https://prestodb.io/docs/current/installation/deployment.html#installing-presto |
PrestoSQL(Trino) | https://trino.io/ | https://repo1.maven.org/maven2/io/prestosql/ | xxx(比如330) | https://trino.io/docs/current/installation/deployment.html |
PrestoSQL安装步骤#
安装prestoSQL330#
1.下载和安装#
330是presto最后一个支持java8的版本,高于330的版本需要java11的支持,且java8的版本最低要8u161,否则会报下面错误:ERROR: Presto requires Java 11+ (found 1.8.0_121) 以及 ERROR: Presto requires Java 8u161+ (found 1.8.0_121)
1 | wget https://repo1.maven.org/maven2/io/prestosql/presto-server/330/presto-server-330.tar.gz |
创建presto用户
1 | sudo groupadd presto |
2.配置文件#
在presto的安装目录下创建etc目录,以及若干配置文件
1 | lintong@master:/opt/cloudera/parcels/presto$ ls |
具体配置文件内容请参考上面表格中列出的presto安装文档
3.启动和停止#
1 | sudo -iu presto |
4.集成CDH的hive#
由于CDH的hive开启了kerberos,且集成了LDAP,所以需要进行额外的配置,参考:如何在CDH集群中部署Presto 以及 presto安装和集成kerberos的hive
同步presto用户和组的信息到ldap中,参考:Ubuntu16.04安装openldap和phpldapadmin
然后在ldap中将presto添加到hive group当中,这样做的目的是使得presto用户拥有hive组的权限,从而在查询HDFS文件用户是hive用户的hive表的时候不会报如下错误
1 | Query failed (#20220918_133211_00216_x47mw): Error opening Hive split hdfs://master:8020/user/hive/warehouse/test_table/000000_0.lzo_deflate (offset=0, length=46) using org.apache.hadoop.mapred.TextInputFormat: Permission denied: user=presto, access=READ, inode="/user/hive/warehouse/test_table/000000_0.lzo_deflate":hive:hive:-rwxrwx--x at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkAccessAcl(DefaultAuthorizationProvider.java:363) at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:256) at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:1 ... |
然后在HUE中点击sync,从LDAP上同步用户和组,可以看到在LDAP上配置的用户和组的关系已经同步到了HUE上
同步presto用户
同步presto组
由于hive启用了sentry,所以需要给presto用户配置一下hive表的权限,这里配置了所有hive表的权限
配置hive connection
1 | lintong@master:/opt/cloudera/parcels/presto/etc/catalog$ cat hive.properties |
此时presto就可以正常查询hive表了,但是无论使用presto cli还是datagrip进行查询,最终的用户都是presto,如果要进一步的话,则需要集成ranger
下载presto cli验证一下
1 | wget https://repo1.maven.org/maven2/io/prestosql/presto-cli/330/presto-cli-330-executable.jar |
也可以使用datagrip验证一下,可以正常查询hive表
安装prestoSQL333#
使用老版本是没有前途的,所以还是装了java11来使用prestoSQL333,参考:Ranger+LDAP+Presto实现权限控制
333要求java11,首先下载和解压java11,下载java11去oracle官网下载,需要注册oracle账号才可以下载
1 | lintong@master:/usr/java$ ls | grep jdk-11 |
给presto用户专门指定java11环境,配置.bash_profile和.bashrc文件
1 | presto@master:~$ cat ~/.bash_profile |
给presto用户指定解析器,否则bash_profile不会生效
1 | sudo usermod -s /bin/bash presto |
验证解析器是否添加成功
1 | lintong@master:~$ cat /etc/passwd | grep presto |
验证切换到presto用户下的java版本
1 | presto@master:~$ echo $JAVA_HOME |
Amazon EMR Presto#
如果是在Amazon EMR中使用presto的话,可以在创建集群的时候选择是使用PrestoDB还是Trino(PrestoSQL),但不能在同一个集群上同时安装两者。如果在尝试创建集群时同时指定了 PrestoDB 和 Trino,则会发生验证错误,而且集群创建请求失败。
创建emr6.3.0
创建emr6.5.0
Amazon EMR和PrestoDB和Trino(PrestoSQL)的发行版对应关系见如下文档
1 | https://docs.amazonaws.cn/emr/latest/ReleaseGuide/Presto-release-history.html |