ITPub博客

首页 > 大数据 > 可视化 > prosto 分布式 sql 引擎

prosto 分布式 sql 引擎

可视化 作者:mcxiaoracle 时间:2022-06-16 07:43:06 0 删除 编辑

Presto简介 Presto是Facebook开源的大数据分布式SQL查询引擎,可对从数G到数P的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别。支持查询包括Hive、Cassandra以及某些商业的数据存储产品。单个Presto查询可合并来自多个数据源的数据进行统一分析。Presto不使用MapReduce,只需要HDFS。 Facebook在内部已经在多个数据存储中使用Presto交互式查询,包括300PB的数据仓库,超过1000个Facebook员工每天在使用Presto运行超过3万个查询,每天扫描超过1PB的数据。Airbnb和Dropbox目前也在使用Presto产品。 Presto优势 Presto设计精巧,最大化地利用硬件性能,计算全部在内存中完成,很好的利用高速网络来进行数据调度,性能基本上是Hive的10倍。 支持直接使用presto-jdbc驱动完成Java应用程序开发。 Presto集群中的数据传输、节点通信、心跳感应、计算监控、计算调度和计算分布全部都是基于RESTful服务实现的,因此Presto中的RESTful服务就是Presto所有服务的基石。


Presto查询流程 Presto客户端对查询语句的提交流程: 1、从指定文件、命令行参数或者Cli窗口中获取需要执行的SQL语句 2、将得到的SQL语句组装成一个RESTful请求,发送给Coordinator,并处理返回的response。 3、Cli会不停地循环分批读取查询结果并在屏幕进行动态显示,直到查询结果完全显示完毕。 向Presto集群提交一个查询,其整个过程会经历4个阶段: 1、提交查询:客户端向Coordinator提供的RESTful服务提交SQL语句 2、生成查询执行计划:Coordinator根据传递的SQL语句生成响应的查询执行计划 3、查询调度:Coordinator根据生成的查询执行计划,依次进行Stage和Task调度。 4、查询执行:最终Coordinator会调度最空闲的Worker执行相应的Task进行实际计算任务。 Presto队列是用于控制查询并发量和可接收的SQL数量,可针对用户、提交来源、Session等信息进行个性化配置。 Presto支持众多数据源Connector,最常用的为Hive Connector。 Hive Connector使用Hive的元数据,Coordinator节点通过Hive Metastore加载元数据,Presto的计算节点读取Hive表对应的HDFS数据。 Kafka Connector支持Apache Kafka 0.8及以上版本,将Apache Kafka中的topics当作表进行处理,topics中每条消息在Presto中被解析为表中的一行数据。 关于大数据开发,大数据查询引擎Presto,以上就为大家做了简单的介绍了。作为大数据查询的重要组件之一,Presto也是在市场上占有相应的位置的,作为大数据从业者,应有相应程度的了解。




m4kl75pvn.png

Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。


Presto的架构分为:


Coodinator:解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。


Discovery Server:Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。


Worker:负责执行实际查询任务,访问底层存储系统。


存储:Presto的数据可以存储在HDFS/OBS,推荐热数据存储在HDFS,冷数据存储在OBS。


GENERAL_POOL:用于普通查询的physical operators。GENERAL_POOL值为 总内存(Xmx值)- 预留的(max-memory-per-node)- 系统的(0.4 * Xmx)。


SYSTEM_POOL:系统预留内存,用于读写buffer,worker初始化以及执行任务必要的内存。大小由config.properties里的resources.reserved-system-memory指定。默认值为JVM


max memory * 0.4。


RESERVED_POOL:大部分时间里是不参与计算的,只有当同时满足如下情形下,才会被使用,然后从所有查询里获取占用内存最大的那个查询,然后将该查询放到


RESERVED_POOL


max memory * 0.1。


1、GENERAL_POOL有节点出现阻塞节点(block node)情况,即该node内存不


2、RESERVED_POOL没有被使用query.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。


query.max-memory-per-node:表示单个查询在单个节点上用户内存能用的最大值。


query.max-total-memory-per-node:表示单个查询在单个节点上用户内存能用的最大值和系统内存量。其中系统内存是读取器、写入器和网络缓冲区等在执行期间使用的内存。


memory.heap-headroom-per-node:这个内存主要是第三方库的内存分配,无法被统计跟踪,默认值是-Xmx * 0.






推荐阅读:

https://baijiahao.baidu.com/s?id=1689303881105491540&wfr=spider&for=pc

原文链接:https://blog.csdn.net/weixin_36247139/article/details/114801582



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2900857/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: DB 中兴通讯面试
下一篇: 性能比较
请登录后发表评论 登录
全部评论
数据方向,了解oracle ,IBM DB2 730

注册时间:2019-09-30

  • 博文量
    286
  • 访问量
    226624