1、下载包
通过七牛云保存了一个官方的包,可以对比md5值
http://qiniu.asdu.cn/presto-server-0.280.tar.gz
2、解压安装包
tar -xvf presto-server-0.280.tar.gz -C /opt/
3、配置
在安装目录下创建一个etc目录。在etc目录下配置以下信息:
-
节点属性(Node Properties):每个节点的环境配置信息
-
JVM配置(JVM Config):JVM的命令行选项
-
配置属性(Config Properties):PrestoServer的配置信息
-
日志级别(Log Properties):日志级别配置信息
-
Catalog属性(Catalog Properties):连接器配置信息(数据源)
cd /opt
ln -s presto-server-0.280 presto-server
cd /opt/presto-server-0.280
mkdir etc
3.1、node.properties
plugin.dir=/opt/presto-server/plugin #插件包目录
node.environment=production
plugin.config-dir=/opt/presto-server/etc/catalog # 插件配置目录
node.data-dir=/data1/presto/data #数据缓存目录
node.id=data1 #节点id,唯一即可
3.2、jvm.properties
-server
-Xmx2G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseGCOverheadLimit
-XX:OnOutOfMemoryError=kill -9 %p
-DHADOOP_USER_NAME=presto
-Duser.timezone=Asia/Shanghai
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=40
-XX:ConcGCThreads=4 #gc线程数,可以不配置
3.3、Config Properties
coordinator配置
coordinator=true #是否成为调度节点
node-scheduler.include-coordinator=true #是否成为worker节点
query.max-memory=2G #一个查询能够在整个集群上能使用的最大内存
query.max-total-memory=2G #查询可以在整个集群上使用的最大用户和系统内存量
query.max-memory-per-node=1G #单个查询能够在一台 worker 节点上能使用的最大用户内存
query.max-total-memory-per-node=1G #查询可以在一台 worker 节点上使用的最大内存量 ,比如给调度节点保留部分资源
http-server.http.port=8285 #http-server.http.port:指定HTTP服务器的端口。Presto使用HTTP进行内部和外部所有通信。
discovery-server.enabled=true #Presto使用发现服务Discovery service来查找群集中的所有节点。每个Presto实例在启动时都会向Discovery服务注册。为了简化部署并避免运行其他服务,Presto协调器coordinator可以运行Discovery服务的嵌入式版本。它与Presto共享HTTP服务器,因此使用相同的端口
discovery.uri=http://host-192-168-0-28:8285
内存关系,不然无法启动 jvm启动内存 >= max-total-memory >= query.max-memory >= query.max-total-memory-per-node >= query.max-memory-per-node
worker配置
coordinator=false
http-server.http.port=8080
query.max-memory=2GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=1GB
discovery.uri=http://host-192-168-0-28:8285
3.4 Catalog Properties
Presto通过connectors访问数据。这些connectors挂载在catalogs上。 connector可以提供一个catalog中所有的schema和表。 例如: Hive connector 将每个hive的database都映射成为一个schema, 所以如果hive connector挂载到了名为hive的catalog, 并且在hive的web有一张名为clicks的表, 那么在Presto中可以通过hive.web.clicks来访问这张表。
通过在etc/catalog目录下创建catalog属性文件来完成catalogs的注册
connector.name=hive-hadoop2 #hive链接器必须是这个名字
hive.metastore.uri=thrift://192.168.0.139:9083,thrift://192.168.0.139:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml, /etc/hadoop/conf/hdfs-site.xml
hive.allow-drop-table=false
hive.storage-format=ORC
hive.metastore-cache-ttl=1s
hive.metastore-refresh-interval=1s
hive.metastore-timeout=35m
hive.max-partitions-per-writers=1000
4、启动
cd /opt/presto-server
bin/lunach start
常见问题
1、读取hudi表问题
报错信息
Caused by: java.lang.UnsupportedOperationException: readDirect unsupported in RemoteBlockReader
at org.apache.hadoop.hdfs.RemoteBlockReader.read(RemoteBlockReader.java:492)
at org.apache.hadoop.hdfs.DFSInputStream$ByteBufferStrategy.doRead(DFSInputStream.java:789)
at org.apache.hadoop.hdfs.DFSInputStream.readBuffer(DFSInputStream.java:823)
at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:883)
at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:938)
at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:143)
原因
是因为版本不兼容问题导致的,hadoop 版本是2.7.3,presto中的版本用的2.7.4,而2.7.3没有这个方法所以报错
image.png
解决
hadoop提供了一个配置,指定读取的访问
dfs.client.use.legacy.blockreader FALSE 当为true时,则读取使用RemoteBlockReader类,当为false时,则使用RemoteBlockReader2类 RemoteBlockReader2为老版本的类
在Catalog中Properties修改hive.properites
hive.config.resources=/etc/hadoop/conf/core-site.xml, /etc/hadoop/conf/hdfs-site.xml,/opt/presto-server/etc/catalog/hdfs-site.xml
编辑/opt/presto-server/etc/catalog/hdfs-site.xml
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
<property>
<name>dfs.client.use.legacy.blockreader</name>
<value>false</value>
</property>
</configuration>
重启presto
测试验证
下载presto-client wget http://rujgjftto.hn-bkt.clouddn.com/presto
$presto_home/presto --server localhost:8285 --catalog hive --schema test --user hive







网友评论