tonglin0325的个人主页

Ubuntu16.04安装presto

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
2
3
wget https://repo1.maven.org/maven2/io/prestosql/presto-server/330/presto-server-330.tar.gz
tar -zxvf presto-server-330.tar.gz

创建presto用户

1
2
3
4
5
6
sudo groupadd presto
sudo useradd presto -g presto -r --no-log-init -d /var/lib/presto
sudo mkdir /var/lib/presto
sudo mv ~/software/presto-server-330 /opt/cloudera/parcels
sudo ln -s /opt/cloudera/parcels/presto-server-330 /opt/cloudera/parcels/presto

2.配置文件#

在presto的安装目录下创建etc目录,以及若干配置文件

1
2
3
4
5
lintong@master:/opt/cloudera/parcels/presto$ ls
catalog config.properties jvm.config log.properties node.properties
lintong@master:/opt/cloudera/parcels/presto$ ls ./catalog/
jmx.properties

具体配置文件内容请参考上面表格中列出的presto安装文档

3.启动和停止#

1
2
3
4
5
6
7
8
9
sudo -iu presto
$ cd /opt/cloudera/parcels/presto
$ ./bin/launcher status
Not running
$ ./bin/launcher start
Started as 14252
$ ./bin/launcher stop
Stopped 1425

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
2
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
2
3
4
5
6
7
8
lintong@master:/opt/cloudera/parcels/presto/etc/catalog$ cat hive.properties
connector.name=hive-hadoop2
hive.metastore.uri=thrift://master:9083
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/_HOST@HADOOP.COM
hive.metastore.client.principal=presto/_HOST@HADOOP.COM
hive.metastore.client.keytab=/var/lib/presto/presto.keytab

此时presto就可以正常查询hive表了,但是无论使用presto cli还是datagrip进行查询,最终的用户都是presto,如果要进一步的话,则需要集成ranger

 

下载presto cli验证一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
wget https://repo1.maven.org/maven2/io/prestosql/presto-cli/330/presto-cli-330-executable.jar
sudo chown presto:presto ./presto-cli-330-executable.jar
sudo chmod +x presto-cli-330-executable.jar
sudo -iu presto

./presto-cli-330-executable.jar --server localhost:10019 --catalog=hive --schema=default
presto:default> show tables;
Table
--------------
kst
kst2
kst2_parquet
kst3
test
test1
test2
test_parquet
test_table
test_table2
(10 rows)

Query 20220918_130558_00164_x47mw, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [10 rows, 240B] [31 rows/s, 752B/s]

也可以使用datagrip验证一下,可以正常查询hive表

 

 

安装prestoSQL333#

使用老版本是没有前途的,所以还是装了java11来使用prestoSQL333,参考:Ranger+LDAP+Presto实现权限控制

333要求java11,首先下载和解压java11,下载java11去oracle官网下载,需要注册oracle账号才可以下载

1
2
3
4
lintong@master:/usr/java$ ls | grep jdk-11
jdk-11.0.16.1
jdk-11.0.16.1_linux-x64_bin.tar.gz

给presto用户专门指定java11环境,配置.bash_profile和.bashrc文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
presto@master:~$ cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

presto@master:~$ cat ~/.bashrc
# java
export JAVA_HOME=/usr/java/jdk-11.0.16.1
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

给presto用户指定解析器,否则bash_profile不会生效

1
2
sudo usermod -s /bin/bash presto

验证解析器是否添加成功

1
2
3
lintong@master:~$ cat /etc/passwd | grep presto
presto:x:978:1011::/var/lib/presto:/bin/bash

验证切换到presto用户下的java版本

1
2
3
presto@master:~$ echo $JAVA_HOME
/usr/java/jdk-11.0.16.1

  

 

Amazon EMR Presto#

如果是在Amazon EMR中使用presto的话,可以在创建集群的时候选择是使用PrestoDB还是Trino(PrestoSQL),但不能在同一个集群上同时安装两者。如果在尝试创建集群时同时指定了 PrestoDB 和 Trino,则会发生验证错误,而且集群创建请求失败。

创建emr6.3.0

 

创建emr6.5.0

 

Amazon EMR和PrestoDB和Trino(PrestoSQL)的发行版对应关系见如下文档

1
2
https://docs.amazonaws.cn/emr/latest/ReleaseGuide/Presto-release-history.html