presto 使用 部署_Presto基于MPP架构的部署及使用技术详解

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。

1 安装配置

安装presto后,需另建一个文件夹用于存储日志、本地元数据等的数据目录。

config.properties :Presto 服务配置。

node.properties :环境变量配置,每个节点特定配置。

jvm.config :Java虚拟机的命令行选项。

log.properties: 允许你根据不同的日志结构设置不同的日志级别。

catalog目录 :每个连接者配置(data sources)

2 Master(coordinator)节点配置

config.properties :

coordinator=true

node-scheduler.include-coordinator=false

http-server.http.port=9001

query.max-memory=50GB

query.max-memory-per-node=1GB

discovery-server.enabled=true

discovery.uri=http://bd-master:9001

复制代码

coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)

node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作

服务发现(心跳)和HTTP服务均使用同一端口

node.properties

node.environment=test

node.data-dir=/usr/local/presto/logs

node.id=bd-master

复制代码

node.environment: 集群名称, 所有在同一个集群中的Presto节点必须拥有相同的集群名称

node.id: 每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id

node.data-dir: 数据存储目录的位置(操作系统上的路径), Presto将会把日期和数据存储在这个目录下

jvm.config

-server

-Xmx16G

-XX:+UseConcMarkSweepGC

-XX:+ExplicitGCInvokesConcurrent

-XX:+CMSClassUnloadingEnabled

-XX:+AggressiveOpts

-XX:+HeapDumpOnOutOfMemoryError

-XX:OnOutOfMemoryError=kill -9 %p

-XX:ReservedCodeCacheSize=150M

-DHADOOP_USER_NAME=admin

复制代码

启动Java虚拟机所需要的命令行参数,注意集群中所有节点的jvm配置须一致

log.properties

设置logger的最小日志级别。

com.facebook.presto=INFO

该设置表示对于使用logger类的com.facebook.presto.server和com.facebook.presto.hive来说,两者的最小日志级别都是INFO级别。

catalog目录

在该目录下新建一个文件hive.properties ,内容如下:

connector.name=hive-hadoop2

hive.metastore.uri=thrift://10.44.219.80:9083

hive.allow-drop-table=true

hive.allow-rename-table=true

hive.config.resources=/usr/local/soft/install/hadoop-2.7.6/etc/hadoop/core-site.xml,/usr/local/soft/install/hadoop-2.7.6/etc/hadoop/hdfs-site.xml

hive.metastore-cache-ttl=0s

hive.metastore-refresh-interval=1s

复制代码

hive-hadoop2 为支持hadoop 2.x版本的连接器,连接hive元数据库的uri,端口默认是9083,并且允许删除和改名表,还必须在hive.config.resources添加hadoop的配置文件位置。

注意运行presto前,要以后台的形式打开hive的metastore服务,输入以下指令:

hive - -service metastore &

复制代码

3.Worker节点配置

任意Worker节点只需修改config.properties 和node.properties,其余与主节点相同。

config.properties :

coordinator=false

http-server.http.port=9001

query.max-memory=50GB

query.max-memory-per-node=1GB

discovery.uri=http://bd-master:9001

复制代码

node.properties

node.environment=test

node.data-dir=/usr/local/presto/logs

node.id=bd-slave1

复制代码

node.id设置为worker的标志,其余不变

4 PRESTO启动

hive --service metastore --presto启动需要

$PRESTO_HOME/bin/launcher restart

$PRESTO_HOME/presto --server localhost:9001 --catalog hive --schema default

复制代码

5 综合案例实战

对分值进行分桶,得到不同区间内的数据 并 union all包含100分的值

width_bucket(x,bound1,bound2,n)

返回x指定的bound1和bound2界限的bin数量以及n个存储桶的数量

SELECT * from

(select concat(cast((width_bucket(device_health_score,0,100,10)-1)*10 as VARCHAR),'--',cast(width_bucket(device_health_score,0,100,10)*10-1 as VARCHAR))

as score_range, date_time,

COUNT(width_bucket(device_health_score,0,100,10)) as count from device_health_score_fact

where device_health_score >=0 and device_health_score <100

group by concat(cast((width_bucket(device_health_score,0,100,10)-1)*10 as VARCHAR ),'--',cast(width_bucket(device_health_score,0,100,10)*10-1 as VARCHAR)),date_time

)

UNION ALL (select cast(device_health_score as VARCHAR) as score_range,date_time,COUNT(device_health_score) from device_health_score_fact where device_health_score =100 group by device_health_score,date_time )

复制代码

总结

秦凯新 于深圳

你可能感兴趣的:(presto,使用,部署)