Presto介绍,使用及安装部署

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Presto通过使用分布式查询,可以快速高效的完成海量数据的查询。如果你需要处理TB或者PB级别的数据,那么你可能更希望借助于Hadoop和HDFS来完成这些数据的处理。

1.Presto是什么


Presto通过使用分布式查询,可以快速高效的完成海量数据的查询。如果你需要处理TB或者PB级别的数据,那么你可能更希望借助于Hadoop和HDFS来完成这些数据的处理。


作为Hive和Pig(Hive和Pig都是通过MapReduce的管道流来完成HDFS数据的查询)的替代者,Presto不仅可以访问HDFS,也可以操作不同的数据源,包括:RDBMS和其他的数据源(例如:Cassandra)。


Presto被设计为数据仓库和数据分析产品:数据分析、大规模数据聚集和生成报表。这些工作经常通常被认为是线上分析处理操作


2.Presto安装部署


Presto需要JDK8u92以上版本才可以运行


Presto需要一个用于存储日志、本地元数据等的数据目录。 建议在安装目录的外面创建一个数据目录。这样方便Presto进行升级


2.1配置Presto


在安装目录中创建一个etc目录。 在这个etc目录中放入以下配置信息:


节点属性:每个节点的环境配置信息(node.properties)


JVM 配置:JVM的命令行选项(jvm.config)


配置属性:Presto server的配置信息(config.properties)


Catalog属性:configuration forConnectors(数据源)的配置信息


2.1.1 节点配置


节点属性配置文件:etc/node.properties包含针对于每个节点的特定的配置信息。 一个节点就是在一台机器上安装的Presto实例。 这份配置文件一般情况下是在Presto第一次安装的时候,由部署系统创建的。 一个etc/node.properties配置文件至少包含如下配置信息:


node.environment=productionnode.id=ffffffff-ffff-ffff-ffff-ffffffffffffnode.data-dir=/var/presto/data


针对上面的配置信息描述如下:


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


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


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


2.1.2 JVM配置


JVM配置文件,etc/jvm.config, 包含一系列在启动JVM的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理。(就像下面例子中的OnOutOfMemoryError选项)。


一个典型的etc/jvm.config配置文件如下:


-server-Xmx16G-XX:+UseConcMarkSweepGC-XX:+ExplicitGCInvokesConcurrent-XX:+CMSClassUnloadingEnabled-XX:+AggressiveOpts-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemoryError=kill -9 %p-XX:ReservedCodeCacheSize=150M


由于OutOfMemoryError将会导致JVM处于不一致状态,所以遇到这种错误的时候我们一般的处理措施就是将dump headp中的信息(用于debugging),然后强制终止进程。

Presto会将查询编译成字节码文件,因此Presto会生成很多class,因此我们我们应该增大Perm区的大小(在Perm中主要存储class)并且要允许Jvm class unloading。


2.1.3 配置属性


Presto的配置文件:etc/config.properties包含了Presto server的所有配置信息。 每个Presto server既是一个coordinator也是一个worker。 但是在大型集群中,处于性能考虑,建议单独用一台机器作为 coordinator。


一个coordinator的etc/config.properties应该至少包含以下信息:


coordinator=truenode-scheduler.include-coordinator=falsehttp-


server.http.port=8080task.max-memory=1GBdiscovery-


server.enabled=truediscovery.uri=http://example.net:8080


以下是最基本的worker配置:


coordinator=falsehttp-server.http.port=8080query.max-memory=50GBquery.max-memory-per-node=1GBdiscovery.uri=http://example.net:8080


但是如果你用一台机器进行测试,那么这一台机器将会即作为coordinator,也作为worker。配置文件将会如下所示:


coordinator=truenode-scheduler.include-coordinator=truehttp-

server.http.port=8080task.max-memory=1GBdiscovery-server.enabled=truediscovery.uri=http://example.net:8080


对配置项解释如下:


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


node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作。对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都不会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。


http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯。


task.max-memory=1GB:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。 这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER BY语句中的行数和一个窗口函数中处理的行数。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。


discovery-server.enabled:Presto 通过Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP server并且使用同样的端口。


discovery.uri:Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的uri。修改example.net:8080,根据你的实际环境设置该URI。注意:这个URI一定不能以“/“结尾。集群中worker节点配置的URL地址是你的coordinator的地址


2.1.4 日志配置


日志配置文件:etc/log.properties。在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系。 (像java里面的包). 如下面的log配置信息:


com.facebook.presto=INFO


2.1.5 Catalog属性


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的注册。


2.1.5.1 JMX配置


可以先创建一个etc/catalog/jmx.properties文件,文件中的内容如下,完成在jmxcatalog上挂载一个jmxconnector:


connector.name=jmx


2.1.5.2 hive配置


connector.name=hive-hadoop2hive.metastore.uri=thrift://dpnode03:9083hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xmlhive.allow-drop-table=truehive.storage-format=PARQUET


Connectorhttps://prestodb.io/docs/current/connector.htmlConnector连接器官方文档


3.worker节点配置


worker节点配置和上面其他的配置基本一样,只需要将config.properties稍作修改

coordinator=falsenode-scheduler.include-coordinator=truehttp-server.http.port=5050query.max-memory=8GBquery.max-memory-per-node=1GBdiscovery-server.enabled=truediscovery.uri=http://dpnode03:5050


4.集群安装


集群安装,只需要将worker节点,复制到其他节点,然后启动就可以了


5.集群启动


Presto没有提供start all这种命令,所以需要每一台机器手动启动,你也可以自己写一个启动脚本,启动整个集群和停止整个集群


在安装目录的bin/launcher文件,就是启动脚本。Presto可以使用如下命令作为一个后台进程启动:


bin/launcher start


另外,也可以在前台运行, 日志和相关输出将会写入stdout/stderr(可以使用类似daemontools的工具捕捉这两个数据流):


bin/launcher run


运行bin/launcher–help,Presto将会列出支持的命令和命令行选项。 另外可以通过运行bin/launcher–verbose命令,来调试安装是否正确。


启动完之后,日志将会写在var/log目录下,该目录下有如下文件:


launcher.log: 这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。 这份日志文件中只会有很少的信息,包括:


在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。


server.log: 这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。


http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。


备注:如果你的机器上已经安装了JDK6或者7的版本,你需要在launcher脚本中添加你的JAVA_HOME


6.命令行接口


命令行接口


Presto CLI为用户提供了一个用于查询的可交互终端窗口。CLI是一个可执行JAR文件, 这也就意味着你可以像UNIX终端窗口一样来使用CLI。,重名名为 presto , 使用 chmod +x 命令设置可执行权限,然后执行:


./presto --server localhost:8080 --catalog hive --schema default

使用 --help 选项运行CLI,可以看到可用的选项。


默认情况下,查询的结果是分页的。而这种分页的实现不需要你去编写什么代码,而是通过配置一系列的配置信息来实现的。你也可以通过将环境变量:PRESTO_PAGER 设置为你自己的程序名称来自己实现分页或者也可以PRESTO_PAGER 的值设置为空,从而禁止分页

image.png

WEB监控界面

http://:<配置的端口>/



image.png

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Java API 数据库
Spring Boot(16)——使用DataSource
使用DataSource 需要使用DataSource可以在pom.xml中添加spring-boot-starter-jdbc依赖,这会自动加入Spring Jdbc的依赖。还需要加入相应的JDBC驱动包的依赖,笔者这里使用的是MySQL的驱动。
9284 0
|
Oracle Java 关系型数据库
Linux centos7.0搭建Java开发环境(保姆级教程)
Linux centos7.0搭建Java开发环境(保姆级教程),包括JDK,Tomact,mysql的安装与部署和jar与war二种方式的项目创建与部署。
Linux centos7.0搭建Java开发环境(保姆级教程)
|
10月前
|
Oracle 关系型数据库 Linux
linux8安装oracle 11g遇到的问题记录
Oracle 11g在Linux 8上安装时会遇到link编译环节的问题。官方建议忽略安装中的链接错误,安装完成后应用DBPSU 11.2.0.4.240716补丁及一次性补丁33991024,再重新编译二进制文件,并配置监听器和数据库。但因11g已退出服务期,这些补丁需付费获取。网上信息显示22年1月的PSU补丁也可解决问题,找到该补丁后按常规方式打补丁即可。如有需求或疑问可咨询我。
450 20
|
数据采集 监控 算法
大数据与物流行业:智能配送的实现
【10月更文挑战第31天】在数字化时代,大数据成为物流行业转型升级的关键驱动力。本文探讨大数据如何在物流行业中实现智能配送,包括数据采集与整合、数据分析与挖掘、智能配送规划及实时监控与评估,通过案例分析展示了大数据在优化配送路线和提升物流效率方面的巨大潜力,展望了未来智能配送的高度自动化、实时性和协同化趋势。
1128 1
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
222 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
|
弹性计算 小程序 Android开发
使用无影云电脑玩《黑神话·悟空》游戏教程,无需下载,开机即玩!
本教程详细介绍如何利用阿里云无影云电脑轻松畅玩《黑神话·悟空》游戏,无需下载游戏客户端,开机即可体验。首先需下载无影客户端并购买个人铂金款云电脑(14.9元首月)。购买后,通过输入WeGame版或Steam版镜像分享码并选择电竞模式来配置云电脑。最后,在云电脑中启动WeGame客户端并登录账户,手动添加游戏路径后即可游玩。注意游戏需单独购买,并记得游玩后关闭云电脑以避免额外计费。更多详情与步骤请参阅阿里云官方指南。
|
存储 IDE 数据处理
使用Python构建一个高级计算器
本文介绍如何使用Python和`tkinter`库构建一个高级计算器。该计算器支持基本运算(加、减、乘、除、求整、求余)、科学运算(平方根、幂等)以及简单的图形用户界面(GUI)。通过该项目,您将学习到如何处理用户输入、执行计算并显示结果。适合初学者提升编程技能。
869 0
|
机器学习/深度学习 数据采集 自然语言处理
如何使用深度学习模型来提高命名实体识别的准确率
如何使用深度学习模型来提高命名实体识别的准确率
209 5
|
SQL 自然语言处理 测试技术
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]
|
存储 缓存
clickhouse新特性之————MergeTree启动加速(使用篇)
clickhouse新特性之————MergeTree启动加速(使用篇)
1283 0