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)
wget https://repo1.maven.org/maven2/io/prestosql/presto-server/330/presto-server-330.tar.gz tar -zxvf presto-server-330.tar.gz
创建presto用户
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目录,以及若干配置文件
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.启动和停止
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表的时候不会报如下错误
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
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验证一下
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账号才可以下载
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文件
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不会生效
sudo usermod -s /bin/bash presto
验证解析器是否添加成功
lintong@master:~$ cat /etc/passwd | grep presto presto:x:978:1011::/var/lib/presto:/bin/bash
验证切换到presto用户下的java版本
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)的发行版对应关系见如下文档
https://docs.amazonaws.cn/emr/latest/ReleaseGuide/Presto-release-history.html
本文只发表于博客园和tonglin0325的博客,作者:tonglin0325,转载请注明原文链接:https://www.cnblogs.com/tonglin0325/p/4677176.html

浙公网安备 33010602011771号