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. Oracle修改系统参数导致系统无法启动对pfile文件恢复。

    1.当前现象:Oracle启动报错ORA-27102 [oracle@JYDB1 ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Prod ...

  2. dojo里添加目录树

    其实循环生成目录树这个方法不仅仅局限于在使用dojo的情况下,只要明白了其中的原理,在任何一种语言下都能动态循环生成. 1. 数据结构 在这里先说明一下数据结构,我这里循环生成目录树的数据结构是像这样 ...

  3. POC iis短文件名

    __author__ = '*'# -*- coding:utf-8 -*- from lib.httpparse import httpparse def verify(protocol,ip,po ...

  4. jmeter+ant+jekins的持续集成自动化搭建-基于虚拟机的linux系统

    准备软件: 1.ant压缩包,2.jmeter压缩包,3.jenkins的war包压缩包,4.tomcat压缩包,5.build.xml文件,6.jmeter生成的***.jmx格式文件. 基本原理: ...

  5. Java中List的sort排序重写

    最近遇到需要使用list中sort排序功能,list中存的是自己写的类,所以需要重写sort函数,一般实现如下: Collections.sort(voList, new Comparator< ...

  6. Loadrunner回放https脚本时出现错误Error -27780 Connection reset by peer解决办法

    录制好的https协议的web脚本,在脚本回放时会出现Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "......&quo ...

  7. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1 有了安装Jira的经验, 这次再安装conflue ...

  8. linux 安装配置Jenkins

    1.首先准备java环境,安装JDK 2.下载jenkins至Linux服务器 下载地址:https://wiki.jenkins-ci.org/display/JENKINS/Installing+ ...

  9. 字节、字、bit、Byte、byte的关系区分

    1.位(bit)             来自英文bit,音译为"比特", 表示二进制位.位是计算机内部数据存储最小单位,11010100是一个8位二进制数.一个二进制位只可以表示 ...

  10. 解决python logging重复写日志问题

    import logging from homework.exam_homework_0413.common import contants from homework.exam_homework_0 ...