下载presto安装包
presto官网:https://prestodb.io
presto-server下载链接:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.255/presto-server-0.255.tar.gz
presto-cli下载链接:https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.255/presto-cli-0.255-executable.jar
presto-jdbc下载链接: https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.255/presto-jdbc-0.255.jar
配置presto
tar -zxf presto-server-0.255.tar.gz -C /opt
cd /opt/presto-server-0.255/etc
复制
将presto-cli-0.255-executable.jar放到/opt/presto-server-0.255/bin下面
cd /opt/presto-server-0.255/bin
ln -s presto-cli-0.255-executable.jar presto
ln -s /opt/presto-server-0.255/bin/presto /usr/bin/presto
复制
需要创建的配置文件
[root@jwldata01 etc]# pwd
/opt/presto-server-0.255/etc
[root@jwldata01 etc]#
[root@jwldata01 etc]# tree
.
├── access-control.properties
├── catalog
│ └── hive.properties
├── config.properties
├── jvm.config
├── log.properties
└── node.properties
1 directory, 6 files
复制
coordinator和worker共有的配置
jvm.config
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-Djava.security.krb5.conf=/etc/krb5.conf
复制
log.properties
com.facebook.presto=INFO
复制
node.properties
node.environment=presto_dev
node.id=presto-jwldata01
node.data-dir=/data01/presto
复制
node.id每个节点需要修改,node.data-dir根据实际修改。
coordinator的配置
config.properties
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=9900
query.max-memory=4GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://jwldata01:9900
复制
(可选)如果是搭一个测试集群,单节点或者节点数比较少,可以让coordinator也充当worker,但生产环境还是建议角色分开。
node-scheduler.include-coordinator=true
复制
(可选)如果需要presto只读 access-control.properties
access-control.name=read-only
复制
worker的配置
config.properties
coordinator=false
http-server.http.port=9900
query.max-memory=4GB
query.max-memory-per-node=1GB
discovery.uri=http://jwldata01:9900
复制
Hive Connector
catalog/hive.properties
connector.name=hive-hadoop2
hive.metastore.uri=thrift://jwldata01:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
#配置Presto访问HiveMetastore服务的Kerberos信息,该段配置可以只存在Presto的Coordinator节点
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/_HOST@JWLDATA01
hive.metastore.client.principal=presto@JWLDATA01
hive.metastore.client.keytab=/home/presto/presto.keytab
#配置Presto访问HDFS的Kerberos信息,该段配置可以只存在Presto的Worker节点
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=presto@JWLDATA01
hive.hdfs.presto.keytab=/home/presto/presto.keytab
复制
HDFS配置
Cluster-wide Advanced Configuration Snippet (Safety Valve) for core-site.xml hadoop.proxyuser.presto.groups设置成* hadoop.proxyuser.presto.hosts设置成*
Kerberos配置
addprinc -randkey presto
xst -kt presto.keytab presto
复制
将presto.keytab放到所有presto节点的/home/presto目录下
chown presto. /home/presto/presto.keytab
chmod 600 /home/presto/presto.keytab
复制
LDAP配置
创建presto组和presto用户。根据需要,将presto用户加入有权限的几个LDAP组内。
重启脚本
cd /opt/presto-server-0.255
touch restart.sh
chmod u+x restart.sh
vi restart.sh
复制
#!/bin/bash
./bin/launcher restart
echo "tail -f data01/presto/var/log/server.log"
复制
相关报错
com.facebook.presto.spi.PrestoException: jwldata001:9083: java.net.SocketException: Connection reset
at com.facebook.presto.hive.metastore.thrift.ThriftHiveMetastore.getAllDatabases(ThriftHiveMetastore.java:167)
at com.facebook.presto.hive.metastore.thrift.BridgingHiveMetastore.getAllDatabases(BridgingHiveMetastore.java:86)
at com.facebook.presto.hive.metastore.CachingHiveMetastore.loadAllDatabases(CachingHiveMetastore.java:342)
at com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:165)
at com.google.common.cache.CacheLoader$1.load(CacheLoader.java:188)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3528)
复制
将presto用户加入到能访问hive metastore的LDAP组里,然后重启presto
com.facebook.presto.spi.PrestoException: Permission denied: user=presto, access=READ_EXECUTE, inode="/data/bank.db/account/ds=2020-09-21":hive:hive:drwxrwx--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:168)
at org.apache.sentry.hdfs.SentryAuthorizationProvider.checkPermission(SentryAuthorizationProvider.java:194)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:152)
复制
将presto用户加入到能读取对应hive库的LDAP组里。如果希望presto用户能读取到所有的hive库,可以加入到hive组。
参考文档
https://cloud.tencent.com/developer/article/1158360 https://cloud.tencent.com/developer/article/1158362 https://www.cnblogs.com/erlou96/p/14592749.html https://prestodb.io/docs/current/connector/hive-security.html https://prestodb.io/docs/current/installation/deployment.html
欢迎关注我的微信公众号“九万里大数据”,原创技术文章第一时间推送。欢迎访问原创技术博客网站 jwldata.com[1],排版更清晰,阅读更爽快。

引用链接
[1]
jwldata.com: https://www.jwldata.com