Presto 的平均查询性能是 Hive 的 10 倍!  

  由于 Presto 的数据源具有完全解耦、高性能,以及对 ANSI SQL 的支持等特性,使得 Presto 在 ETL、实时数据计算、 Ad-Hoc 查询和实时数据流分析等多个业务场景中均能发挥重要的作用。

  由于 Presto 卓越的性能表现,使得 Presto 可以弥补 Hive 无法满足的实时计算空白,因此可以将 Presto 与 Hive 配合使用:对于海量数据的批处理和计算由 Hive 来完成;对于大量数据(单次计算扫描数据量级在 GB 到 TB)的计算由 Presto 完成。

一、实时数据计算

基于 T+1 数据的实时计算
  在这种业务场景中,用户并不要求基准数据的实时更新,但是要求每次查询数据都能够快速响应。需要 Presto 和 Hive 配合使用来满足实际的业务需求。每天凌晨通过azkaban 调度 Hive 脚本,根据前一天的数据计算生成中间结果表,生成完毕之后使用 Presto 查询中间结果表,得出用户最终所需要的数据。

基于 RDBMS 的实时计算

  在这种业务场景中,用户要求查询的数据完全实时,即只要业务库中的数据发生改变,通过 Presto 查询的时候,就可以查询到刚刚改变之后的数据。要达到这个效果,我们需要使用合理的机制保证数据实时同步,因此我们使用数据库复制技术,为线上的业务数据库建立实时同步的从库,然后用 Presto 查询数据库中的数据,进而进行计算(请注意:使用官方的 Presto 直接读取数据库的性能还太低,因此建议使用JD-Presto 中的 PDBO 从数据库中读取数据并进行计算)

二、Ad-Hoc 查询

使用 BI 工具进行报表展现
  BI 工具通过 ODBC 驱动连接至 Presto 集群, BI 工程师使用 BI 工具进行不同维度的报表设计和展现。由于目前 Facebook 提供的 ODBC 驱动是使用 D 语言开发的,而且功能尚不完善,因此采用 Treasure Data 提供的基于 Presto-gres 中的 ODBC 驱动改造之后的 ODBC 驱动连接到 Presto 集群。

使用 Cli 客户端进行数据分析
  Presto 使用 Hive 作为数据源,对 Hive 中的数据进行查询和分析。众所周知, Hive使用 Map-Reduce 框架进行计算,由于 Map-Reduce 的优势在于进行大数据量的批运算和提供强大的集群计算吞吐量,但是对稍小数据量的计算和分析会花费相当长的时间,因此在进行 GB~TB 级别数据量的计算和分析时, Hive 并不能满足实时性要求。
  Presto 是专门针对基于 Ad-Hoc 的实时查询和计算进行设计的, 其平均性能Hive的 10 倍,因此 Presto 更适合于稍小数据量的计算和差异性分析等 Ad-Hoc 查询

三、实时数据流分析

保留历史数据
  在这种使用场景下, 由于 Presto 每次对 Kafka 中的数据进行分析时都需要从 Kafka 集群中将所有的数据都读取出来, 然后在 Presto 集群的内存中进行过滤、分析等操作, 若在 Kafka中保留了大量的历史数据, 那么通过 presto-kafka 使用 SQL 语句对 Kafka 中的数据进行分析就会在数据传输上花费大量的时间,从而导致查询效率的降低。因此我们应该避免在 Kafka中存储大量的数据,从而提高查询性能。我们需要配合使用 presto-hive 与 presto-kafka 完成计算。首先我们先在 Hive 中建立一个分区表,分区表有一级分区,该分区以日期作为分区值。然后在 azkaban 中建立周期性调度任务,在每天凌晨 0 点 0 分准时使用 presto-kafka 将 Kafka 前一天的数据写入到 Hive 的分区表前一天日期对应的分区中,在 Kafka 中只保留最近两天的数据(保留两天的数据,主要是出于容错性的考虑,如果保存的数据是严格的一天,那么将 Kafka 中的数据写入到 HDFS 是需要一定时间的,因此在写入数据的过程中,前一天的某些数据就有可能会被删除了,从而导致数据丢失;另外,保留两天的数据可以在由于一些特殊原因导致写入失败的时候有充足的时间进行人工干预,从而保证数据正确写入)。然后在 Presto 中创建一个 View(视图)用于组合 Hive 中的表和Kafka 中的表; hive.test.testkafka 是 Hive 中的表,该表用于存储 Kafka 中今天之前的所有数据; kafka.test.testlog3 是针对 Kafka 中 Topic 建立的表,该 Topic 中存储的是最近两天的数据。从上面的语句可以看出: View 其实就是组合的 Hive 中的全表和 Kafka 中当天的数据量,这样 View 中的数据就是实时的最新数据。只需要对业务方开放该 View 的访问权限,业务方就可以通过 Presto 使用 SQL 语句对实时流数据进行分析了

只保留最新数据

  对于只需要在 Kafka 中只保留最近一天的数据,其实并不需要做特殊的处理,只需要在 Kafka 中限制 Kafka 数据的最大保留期限为 24 小时就可以了。然后直接通过 Presto 使用SQL 语句对 Kafka 中的数据进行分析和查询即可。
  

注意:
  在使用 Presto-kafka 对数据进行分析的时候, Presto 是通过 Split 从 Kafka 集群中读取数据的,而 Kafka 中的一个 log-segment 就对应 Presto 中的一个 Split。如果 Kafka 中的一个log-segment 太大就会导致 Presto 中读取的一个 Split 太大,而 Split 个数太少,从而严重降低 Presto 从 Kafka 集群中读取数据的效率。因此在实际应用中,需要适当调整 Kafka 中log-segment 的最大大小,从而保证 Presto 从 kafka 读取数据的效率。
  

(多尝试)设置 Kafka 中 log-segment 的最大 size 为 128 MB,经过实际验证,效果非常不错。

[Presto]Presto章1 Presto 咋用的更多相关文章

  1. [Battle]Battle章1 Presto VS Impala

    Round One: 平局:共同点就是吃内存; Round Two: Impala胜 Impala查询性能稍领先于presto Round Three: presto胜 presto在数据源支持上非常 ...

  2. presto的动态化应用(一):presto节点的横向扩展与伸缩

    一.presto动态化概述 近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述 ...

  3. Presto集群安装配置

    Presto是一个运行在多台服务器上的分布式系统. 完整安装包括一个coordinator(调度节点)和多个worker. 由客户端提交查询,从Presto命令行CLI提交到coordinator. ...

  4. Presto架构及原理

    Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 ...

  5. presto

    presto中文站:http://prestodb-china.com/ 进入hadoop机器,进入presto所在bin目录:presto --server localhost:9090 --cat ...

  6. Cassadra & presto 集群部署

    四台服务器部署cassandra集群 和 presto搜索引擎 及代码演示: 还有很多细节没有补充,有问题和疑问的地方 咋们一起探讨哇!1.创建用户    使用root用户登录应用服务器,执行以下操作 ...

  7. Presto服务发现(Discovery Service)

    Presto 集群配置不管是coordinator还是worker配置项中都有一项discovery.uri,这个是一个比较核心的东西,简单来说就是服务发现的地址. coordinator和worke ...

  8. PRESTO安装部署和参数说明(一)

    PRESTO部署和参数说明(一) 一,概要 在部署和使用presto的过程中,在此记录一下部署记录和使用记录以及需要注意的事项.本人使用的presto版本是0.214,3台redhat虚拟机.使用背景 ...

  9. Presto集群部署和配置

    参考文档:1.https://blog.csdn.net/zzq900503/article/details/79403949 prosto部署与连接hive使用                 2. ...

随机推荐

  1. HttpClient 302重定向

    CloseableHttpClient是线程安全的,单个实例可用于处理多个HTTP请求,Http Client会自动处理所有的重定向,关闭自动重定向需要设定disableAutomaticRetrie ...

  2. Linux上安装jdk,mysql

    1.准备工作 一台纯净的Linux系统需要先安装一些依赖才能安装jdk等 rpm: 本地添加安装程序:rpm -ivh 程序名 本地查看程序: rpm -qa 本地卸载程序: rpm -e --nod ...

  3. React-Native: bios打开VT-x选项

    问题: 我在Android Studio新建一个虚拟机的时候出现如图错误: 解决方案:重启电脑,开机的时候不停的按f12(不同的主机不一样),进入bios,然后打开Virtualization Tec ...

  4. dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js` vue启动报错解决

    这是因为webpack-dev-server版本和vue版本不一样,需要将webpack-dev-server卸载了,安装对应版本 查看vue版本是 vue -V 注意:V是大写 卸载npm unin ...

  5. spring boot 与servlet

    servlet:      基于java的web组件,用于生成动态内容,由容器管理.      类似其他java技术组件,由平台无关的java类组成,并且由java web服务器加载执行   serv ...

  6. k8s之调度约束

    k8s调度约束有两种:第一种,直接指定某台node主机:这种形势将直接跳过调度器.如下: 第二种:先给各node指定标签,然后在通过标签的形势来关联node,这种形势人就会调用到调度器.如下: yao ...

  7. QUARTZ系列之二-监听器

    Listener 1.是什么: perform actions based on events occurring within the scheduler. 2.分类:a.TriggerListen ...

  8. List和符号分隔的字符串互相转换

    一.将逗号分隔的字符串转换成List: 1. 使用JDK的Arrays类: import java.util.Arrays; import java.util.List; public class T ...

  9. wpf改变网格字体颜色

    1.创建个转换器 public class ColorConvertor : IValueConverter { public object Convert(object value, Type ta ...

  10. [转]真正的中国天气api接口xml,json

    转自:http://blog.csdn.net/fancylovejava/article/details/26102635 我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还 ...