另一种扩展并加速Hadoop计算能力的计算架构—Presto

20 篇文章 0 订阅
13 篇文章 0 订阅

Hadoop自身的MapReduce计算框架是非常传统的批量处理模型,对这个模型大多数的应用都是基于Hive,直接使用SQL语句来操作并分析数据,但是在使用过程中,发现其计算的延迟性越来越成为一个显著的因素。因此,一种能够增加计算速度的计算模型还是必要的。


为了满足对于速度的需求,已经有很多基于Hadoop的新的计算框架诞生了,比如Cloudera发布的Impala,以及Apache Spark等都以内存计算框架的形式出现了。期间Facebook继发布Hive之后,为了进一步提升计算效率,开发了Presto,并且已经开源。


1. Presto是什么?

如同Hive一样,一个分布式的SQL执行引擎,但是它不是基于MapReduce计算模型;它是一个更快的交互式的数据分析工具(根据官方的给出的数据,是较Hive有10倍左右的性能提升),并且能够处理多种数据源。


2. 系统架构

Presto属于传统的主从结构,主要角色有两个:Coordinator和Worker。用户通过HTTP协议发送一个查询请求给Coordinator,Coordinator首先会通过Connector Plugin去找元数据(Hive的元数据,MySQL的元数据等等),以找到对应的表的结构,据此创建一个执行计划。;然后将任务发送给每个Worker,然后会通过Connector Plugin去读取相应的数据;然后,Workers在内存中运行任务;最后客户端会从一个Worker上获取到最终的结果。


Presto(0.76)目前的实现中,支持Cassandra/Hive/JMX/Kafka/MySQL/PostgreSQL等。


3. 部署

Presto与现有的Hadoop集群基本上是一种松散耦合的关系,更确切的说,它只与HDFS有联系,因为Presto需要从中读取数据。当然,它除了能够访问HDFS中的数据之外,还有上面提到的各种数据源。

第一步:明确系统的整体结构。在这里,我们需要确定两种角色的位置,Coordinator和Worker,Coordinator去指挥众多的Workers去工作。除此之外,还有一个Discovery Server的角色,它主要是保存Presto集群中关于Worker节点的元数据,Worker节点会周期性地向Discovery Server报送状态信息,而Coordinator安排工作的时候会使用到这些信息。


第二步:规划服务器:

lambda:负责Coordinator和Discovery Server的角色

a00,a01,a02:三台服务器担负Worker的角色


第三步:下载程序文件,到安装目录下,并做好链接

cd /opt/
wget http://central.maven.org/maven2/com/facebook/presto/presto-server/0.76/presto-server-0.76.tar.gz
tar xvzf presto-server-0.76.tar.gz
ln presto-server-0.76 presto -s

第四步:配置Coordinator (lambda)

cd /opt/ && mkdir etc


所有的配置文件都放在etc目录下。

1. 第一个需要创建的文件是config.properties,它主要包含了一些角色设定的开关:


coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://lambda:8080

从中我们可以看到,我们将lambda设置成了Coordinator:coordinator=true

我们禁止在Coordinator上运行任务:node-scheduler.include-coordinator=false

本机的PrestoServer所监听的端口:http-server.http.port=8080

单个任务可以使用的最大的内存:task.max-memory=1GB

并且,我们启用了Discovery Server:discovery-server.enabled=true

最后,我们指定了Discovery Server的地址:discovery.uri=http://lambda:8080


2. JVM启动参数配置——jvm.config:

-server
-Xmx4G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:PermSize=150M
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
-Xbootclasspath/p:/opt/presto/lib/floatingdecimal-0.1.jar
-Djava.library.path=/usr/lib/hadoop-0.20-mapreduce/lib/native/Linux-amd64-64

需要注意的是最后两行:

-Xbootclasspath/p:/opt/presto/lib/floatingdecimal-0.1.jar:这会在解析浮点数的时候,提升性能

-Djava.library.path=/usr/lib/hadoop-0.20-mapreduce/lib/native/Linux-amd64-64:这是为了在Presto中支持LZO


3. 配置日志级别——log.properties

com.facebook.presto=INFO

4. 配置与本节点密切相关的一些元数据:

node.environment=production
node.id=24a2f667-0395-402d-8521-303050cda031
node.data-dir=/var/presto/data

node.environment=production: 设置环境的名称,同一集群中的Presto节点必须有相同的环境名

node.id=24a2f667-0395-402d-8521-303050cda031:节点独一无二的标识,Presto服务的重启、更新前后,这个值必须一致。

node.data-dir=/var/presto/data:Presto存储日志和其它数据的地方。


5.  配置catalog:

mkdir catalog && cd catalog


在其中新建一个Hive的配置:hive.properties,其配置内容为:

connector.name=hive-cdh5
hive.metastore.uri=thrift://gamma:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

connector.name=hive-cdh5: 集群的版本是CDH5,故我们使用这个插件

hive.metastore.uri=thrift://gamma:9083:这个是Hive元数据服务的地址

hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml:由于使用了HDFS HA,我们需要指定一下HDFS相关配置文件。


通过以上的四步,Coordinator已经设置完毕。


下面来设置Workers。其实,所有的配置的目录结构都是一样的,只需要修改上述的两个文件就可以达成Workers上的统一配置:


修改第一个文件:config.properties:

coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery.uri=http://lambda:8080

我们看到,作为Worker节点,已经将coordinator禁用掉:coordinator=false;

PrestoServer的监听地址,还是8080端口;

单任务内存数还是1GB;

指向我们的DiscoveryServer:discovery.uri=http://lambda:8080


修改第二个文件:node.properties

node.environment=production
node.id=c0550bd7-fcc2-407d-bfda-b1f26fb341b0
node.data-dir=/var/presto/data

除了node.id的配置修改外,其它都保持一致即可,这个ID需要每个节点都不同,所以,这个不能简单的拷贝到其它Worker节点上,而要在每个节点上都修改成一个独一无二的值,我这里是通过uuidgen这个命令来生成的这个串。


4. 添加对LZO的支持:

1. 我们需要在每个Presto节点上的对应的插件目录下,放置hadoop-lzo.jar文件,以使其运行时可以加载到相关类:

cd /opt/presto/plugin/hive-cdh5
cp /usr/lib/hadoop/lib/hadoop-lzo.jar .

2. JVM启动参数中,添加如下参数:

-Djava.library.path=/usr/lib/hadoop-0.20-mapreduce/lib/native/Linux-amd64-64

这样,HDFS中的LZO文件就可以正常访问到了。


5. 关于性能的一些测试经验:


 如果不禁止Coordinator上运行任务(node-scheduler.include-coordinator=false),那么性能的降低也非常明显。


以上,只是一些尝试性的总结和经验,希望能对有需要的同学有帮助,如果文中有疏漏或者错误,也欢迎大家不吝赐教。


关于Presto的有用的资料:

http://prestodb.io/docs/current/installation/deployment.html

http://www.slideshare.net/frsyuki/presto-hadoop-conference-japan-2014

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
版本:presto-server-0.214.tar软件版本 presto-cli-0.214-executableCentOS71、presto的起因 hadoop ---hdfs----MR(java)-----hivehive底层原理用MR,速度比较慢,公司hadoop集群主要集中于晚上到凌晨,平日工作时间负载不是很高。但在工作时间内,公司业务人员有实时查询的需求,现在主要借助于hive提供业务人员的查询。hive是基于MR类的SQL查询工具,他会输入的查询SQL解析为MapReduce,能极大的降低使用大数据门槛,让一般的业务人员可以直接准对大数据进行查询,但是有一个利弊,它的查询基于MR,会让人等待比较着急,等待的时间可能是几个小时或者一天。 spark基于内存提高改良的hive,sql,现在factbook在hive上面开发一套利器,准对hive可以通过sql语句快速查询,presto。2、Facebook为何开发Presto  Facebook的2011的数据仓库存储在少量大型hadoopfs集群,Hive是FaceBook在几年前专门为Hadoop打造的一款数据仓库工具,在以前,facebook的科学家和分析师一直靠hive进行数据分析.但hive使用MR作为底层计算框架,是专为批处理设计的,但是随着数据的不断增多,使用hive进行一个简单的数据查询可能要花费分钟或者几个小时,显然不能满足查询需求,FaceBooke也调研了其他比hive更快的工具,但是他们需要在功能有限的条件下做简单操作,以至于无法操作Facebook庞大的数据要求。2012年开始研究自己的框架--presto,每日可以超过1pb查询,而且速度比较快,faceBook声称Presto的性能比hive要好上10倍或者100倍,presto和hive都是facebook开发的 Presto是一个开源的分布式SQL查询引擎,适用于交互式查询,数据量支持GB到PB字节。Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题Presto可以做什么 Presto支持在线数据查询,包括Hive kafka Cassandra关系数据库以及专门数据存储,一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析。Presto以分析师的需求作为目标,他们期望相应速度小于1秒到几分钟,Presto要么在使用速度的快的昂贵的商业方案,提高内存,要么是消耗大量的硬件进行快速查询。(128G 64G)本套课程教给如何在企业环境中使用Presto技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值