1.起因

公司hadoop集群里的datanonde和tasktracker节点负载主要集中于晚上到凌晨,平日工作时间负载不是很高。但在工作时间内,公司业务人员有实时查询需求,现在主要

借助于hive提供业务人员日常查询。总所周知,hive是一个基于MR的类SQL查询工具,它会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛,

让一般的业务人员也可以直接对大数据进行查询。但一个弊病也是很明显,它的查询速度由于基于MR,会是非常的让人着急。

在Spark,Storm横行的时代,spark由于耗用内存高而很难满足这种改良的需求,Storm由于和hive不是一个套路,本身实时流处理的思路也和我们的需求差距较大,所以,

寻求一个能提供类似SQL查询接口,并且速度比较接近于实时,能利用现有集群硬件的实时SQL查询引擎成为一个现有hive的替代查询引擎。如果有这个引擎,可以利用

datanode,tasktracker上空闲的内存构成一个分布式的“数据加载内存池”,将数据加载到内存后,再进行计算,这样无疑会提高大数据查询的速度。

幸好,创造了hive的facebook,不负众望,创造了这么一款神器---presto。下面我们来看presto能给我们带来什么。

插图:日常各个dn和tt的节点的内存使用情况,白天有比较多的空闲时段

2.presto的介绍

英文出处:Martin Traverso(Facebook)

Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。

Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务, 一个接着一个地运行。 每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。 然而Presto引擎没有使用MapReduce。它使用了一个定制的查询和执行引擎和响应的操作符来支持SQL的语法。除了改进的调度算法之外, 所有的数据处理都是在内存中进行的。 不同的处理端通过网络组成处理的流水线。 这样会避免不必要的磁盘读写和额外的延迟。 这种流水线式的执行模型会在同一时间运行多个数据处理段, 一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。 这样的方式会大大的减少各种查询的端到端响应时间。

3.presto部署

首先安装jdk 1.8,下载jdk 1.8后,解压

  1. tar zxf jdk1.8.0_45.tar.gz

设置1.8为默认的jdk

  1. rm /usr/java/latest
  2. ln -s /usr/java/jdk1.8.0_45 /usr/java/latest

在/etc/profile里设置

export JAVA_HOME=/usr/java/default

然后运行:

  1. source /etc/profile

生效设置。

下载presto。

  1. wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.100/presto-server-0.100.tar.gz

解压presto

  1. tar zxf presto-server-0.100.tar.gz

由于presto有个调度节点和工作节点的区别,所以,我们先配置调度节点。可以在部署后,就用单节点模式,即调度和工作节点为同一台服务器来进行测试。

首先配置etc/catalog/hive.properties

  1. connector.name=hive-hadoop2
  2. hive.metastore.uri=thrift://192.168.1.xxx:10001
  3. hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

说明:

connector.name是当前集群是hadoop版本,有hadoop1,hadoop2,cdh4,cdh5等可选,详细可以参考plugin目录里支持类型。

hive.metasore.uri是对应hive数据源提供的thrift接口,不然presto怎么有元数据呢?

  1. hive.config.resources是对应hadoop配置。

然后配置:etc/node.properties

  1. node.environment=production
  2. node.id=ffffffff-ffff-ffff-ffff-ffffffffffffnode-103-15
  3. node.data-dir=/opt/presto/data

重要的,每个节点都有自己唯一id,不然不好协同工作了。

所以,node.id一定是一个唯一的id

node.data-dir是本机的一个presto数据文件目录。

最后配置:etc/config.properties

coordinator=true

  1. node-scheduler.include-coordinator=true
  2. http-server.http.port=1089
  3. task.max-memory=1GB
  4. discovery-server.enabled=true
  5. discovery.uri=http://node-103-15:1089
  1. http-server.http.port指明调度节点的端口,很重要啊,presto集群的机器都得和这个端口通讯。
  1. discovery.uri=http://node-103-15:1089 也很重要,调度节点的地址,端口,好好指定,集群唯一的。

4.遇到问题解决

首先遇到问题就是jdk的兼容,由于presto只兼容1.8以上jdk,以前hadoop的1.6,1.7都不行。

所以要将presto部署好,势必和以前hadoop环境的jdk有冲突。所以,干脆将系统jdk升级到1.8.

然后stop tasktracker,stop datanode,最后又重启datanode,tasktracker.最后启动presto.

  1. ./launcher start

最后启动presto cli进行查询

  1. ./presto-cli  --server node-103-15:1089 --catalog hive --schema default

注意,presto-cli是将presto-cli-excute.jar进行重命名,并且chmod后而来的。

最后比较尴尬的是,presto对lzo支持不好,特别是分片的lzo,基本就不支持,这个没办法,presto本身就讲明了

不支持。哎,哪位有办法,可以联系下我。

5.presto和hive的性能比较

用同一个SQL做查询,3台服务器presto是:

采用hive查询是:

基本上查询速度快了10倍。

综上所述,presto是一个部署容易,又能较好利用空闲内存的近实时查询引擎。

近实时运算的利器---presto在公司实践的更多相关文章

  1. 比hive快10倍的大数据查询利器presto部署

    目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...

  2. vivo浏览器的快速开发平台实践-总览篇

    一.什么是快速开发平台 快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具.近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优 ...

  3. 面试的65个回答技巧-适用于BAT公司

    互联网职业群分享的资料,里面大多是BAT公司的人,很多是猎头.这些技巧对于职场人来说,是非常宝贵的. 1.请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验 ...

  4. 【快报】基于K2 BPM的新一代协同办公门户实践交流会

    2014年2月28日,“基于BPM的新一代协同办公门户”用户实践交流活动在深圳金茂JW万豪酒店3楼Meet Room IV举办.本次会议由K2携手微软共同举办,邀请到的参会企业都是K2 的BPM老客户 ...

  5. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  6. 基于Jenkins的开发测试全流程持续集成实践

    今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...

  7. TDD的简单实践

    前言 最近有幸跟随资深ThoughtWorks咨询师熊节老师一起学习测试驱动设计,经过短暂的十几天培训,对测试驱动设计的基本原则.实践模式.技巧有了一点点初步的认识. 在此之前,经常自嘲我经历的公司实 ...

  8. hbase实践之协处理器Coprocessor

    HBase客户端查询存在的问题 Scan 用Get/Scan查询数据, Filter 用Filter查询特定数据 以上情况只适合几千行数据以及不是很多的列的"小数据". 当表扩展为 ...

  9. Python分析6000家破产IT公司

    前一阵有个字节跳动的程序员火了,年仅28岁实现了财务自由,宣布提前退休.最直接的原因是选择了一家发展前景很好的创业公司.当然平时我们经常能听到,某某人加入创业公司,xx年后公司上市,身价暴涨,财务自由 ...

随机推荐

  1. 错误日志中关于innodb的问题收集

    1.错误日志报告如下: ..... 120223 23:36:06 InnoDB: Compressed tables use zlib 1.2.3 120223 23:36:06 InnoDB: I ...

  2. Angular中使用Rainbow

    在使用js类库和框架的时候,大家都习惯于编写自己的使用示例,如果能将示例中的html,js和css 进行展示, 并进行高亮显示,效果会很棒,例如在html高亮显示jquery代码 上面的示例是使用ra ...

  3. oracle触发器加条件判断

    oracle触发器加条件判断,如果某个字段,isnode=0,那么不执行下面的方法,数据如下: create or replace trigger tr_basestation_insert_emp ...

  4. asp.net mvc 部分视图加载区别

    ASP.NET MVC 部分视图   ASP.NET(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. [部分视图] ASP.NET MVC 里的部分视图,相当于 Web Form 里的 ...

  5. 会话控制(session、cookie)

    1.session(1)session存储在服务器的(2)session每个人存一份(3)session有默认的过期时间(4)session里面可以存储任意类型的数据安全,对服务造成压力用法:1.当一 ...

  6. WIN7 64位系统下,右下角的声音和电源图标不见的解决办法

    近日,电脑突然出现任务栏右下角的声音和电源图标消失不见的问题,重启仍旧没有修复,后来找到了解决办法 解决办法: 1.Ctrl+Shift+Esc键调出windows资源管理器. 2.找到进程中的exp ...

  7. Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)

    ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, , ...

  8. 对于大一学习计算机的新手(c/c++ )提出一些学习经验

    对于刚刚上大一的新手,且是那种十分有上进的学生,在学习计算机的过程中必然会有一大堆的困惑,比如: 1 .如何学好编程(这与以往的应试教育完全不同,按照以往的那种学习方式,看书刷题不过是成为一个考试学霸 ...

  9. 第四章 面向对象与IO操作

    一.类(类中可以写字段.属性.方法.构造函数)1.定义一个类用关键字class,后面加类名,类名第一个字母用大写,可用private或public修饰符定义访问级别,类可定义在同一命名空间中,也可定义 ...

  10. iOS工程师Mac上的必备软件

    原文链接     前言   iOS工程师一直都是那么的高逼格,用的是Mac电脑,耍的是iPhone手机,哇咔咔~~  但是,作为一名iOS开发工程师,我们除了高逼格外,还必须是全能的.你不会点UI设计 ...