大数据应用 Flume+Cassandra+Presto+SpagoBI
沉沙 2018-10-11 来源 : 阅读 1600 评论 0

摘要:本篇教程介绍了大数据应用 Flume+Cassandra+Presto+SpagoBI,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据应用的理解更加深入。

本篇教程介绍了大数据应用 Flume+Cassandra+Presto+SpagoBI,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据应用的理解更加深入。

<

 
1概述    概述
“Ad-hoc analysis over Cassandradata with Facebook Presto”一文,对Cassandra+Presto
结合实现大数据即席分析进行了介绍。Presto是为满足交互式即席查询需求而优化的分布式SQL查询引擎。它支持标准ANSI SQL,包括复杂查询,聚合,连接和窗口函数。
Cassandra以前缺少交互式即席查询功能,甚至在CQL中不支持聚合函数。因为这个原因,Cassandra在作为数据库使用时经常被混淆。分析Cassandra中的数据有下边两个框架:
1) Hadoop MapReduce 
2) Spark andShark
Hadoop MapReduce用于即席查询绝对够慢的。Spark的RDD模型是很快的,但是运行查询需要多次练习。Presto是可以完全独立的运行Cassandra数据的SQL引擎。Presto的架构如下:



从上图中可以看出Presto的执行模型完全不同于Hive/MapReduce。Hive在执行一个MapReduce任务到另外一个时,需要将查询转换到多个阶段。每一个任务需要从磁盘读取数据并将中间的输出写入磁盘。相反,Presto引擎不要使用MapReduce。它采用了自定义查询和执行引擎设计,支持SQL。另外,改进了调度,所有的处理是在内存中进行,并在整个阶段之间,通过网络,采用流水线处理,从而避免了不必要的I/ O和相关的延迟开销。流水线执行模型每个阶段只运行一次,流数据从一个阶段到下一个阶段,没有中间停顿,这显著减少了各种查询的端至端时间延迟。
1.1    Cassandra
Apache Cassandra 是一套开源分布式 KeyValue 存储系统。Cassandra 不是一个数据库,它是一个混合型的非关系的数据库。它以Amazon专有的完全分布式的Dynamo 为基础,结合了Google BigTable 基于列族(Column Family)的数据模型。
1.1.1  特点
1) 分布式;
2) 高扩展性;
3) 多数据中心;
4) 分布式写操作;
5) 一致性哈希
6) GoSSIP协议简化集群管理
7) 实时更新
8) 高效的数据压缩
   Cassandra最突出的特点是写性能优异,支持高并发、实时更新。
1.1.2  系统架构

1.2    Presto
    Presto是Facebook最新研发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。据称该引擎的性能是 Hive 的 10 倍以上。Presto 是一个分布式系统,运行在集群环境中,完整的安装包括一个协调器 (coordinator) 和多个 workers。查询通过例如 Presto CLI 的客户端提交到协调器,协调器负责解析、分析和安排查询到不同的 worker 上执行。
此外,Presto 需要一个数据源来运行查询。当前 Presto 包含支持Cassandra、Hive 的插件。
1.2.1  特点
1) 分布式;
2) 内存计算;
3) ANSI-SQL语法支持;
4) JDBC 驱动
5) 用于从已有数据源中读取数据的“连接器”集合。连接器包括:HDFS、Hive和Cassandra
1.2.2  系统架构

    注:在连接Cassandra数据源时,不需要安装Hive,也不需要HDFS。
2      环境准备
2.1    主机




IP


HOSTNAME


部署模块




192.168.0.40


NODE1


Cassandra
Presto




192.168.0.41


NODE2


Cassandra
Presto




192.168.0.42


NODE3


Cassandra
Presto




192.168.0.43


NODE4


Cassandra
Presto




192.168.0.44


NODE5:Cassandra seed
Presto  Coordinator


Cassandra
Presto




192.168.0.45


NODE6


Cassandra
Presto




192.168.0.46


NODE7


Cassandra
Presto




192.168.0.47


NODE8


Cassandra
Presto




2.2    用户
使用Hbase用户




[root@master ~]# useradd hbase
[root@master ~]# passwd hbase
Changing password for user hbase.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.




以上命令须在8台机器上分别执行
2.3    程序包




程序名称


说明




apache-cassandra-2.0.10.tar.gz


Cassandra安装程序




presto-server-0.75.tar.gz


Presto安装程序




2.4    hosts
第一步:修改hosts文件




[root@master java]# vi /etc/hosts




 
hosts文件中添加,并在其它节点依次复制以下配置:




192.168.0.40 node1
192.168.0.41 node2
192.168.0.42 node3
192.168.0.43 node4
192.168.0.44 node5
192.168.0.45 node6
192.168.0.46 node7
192.168.0.47 node8




2.5    SSH互信
分别在8台主机上执行以下命令:




[hadoop@master ~]$ ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hbase/.ssh/id_rsa): 
Created directory ‘/home/ hbase /.ssh‘.
Your identification has been saved in /home/hbase/.ssh/id_rsa.
Your public key has been saved in /home/hbase/.ssh/id_rsa.pub.
The key fingerprint is:
93:fd:d4:b7:27:aa:10:25:66:a7:c8:b6:e6:31:4c:18 hbase @master
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|    E   + o      |
|     + + B   .   |
|    . = S . . . .|
|     + . o o   ..|
|      * .   . ...|
|     o o .   . ..|
|      .   ...    |
+-----------------+
[hbase@master .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hbase@master .ssh]$ chmod 600 ~/.ssh/authorized_keys




 
在node5主机执行如下命令,并将完整的authorized_keys分发到各台主机:




[hbase@master .ssh]$ scp authorized_keys hbase@slave1:~/.ssh/
hbase@slave1‘s password: 
authorized_keys                                                                                                                       100% 1990     1.9KB/s   00:00   
其它节点依次同样处理。




 
测试node5节点到各个slave节点的ssh可用性:




[hbase@master .ssh]$ ssh slave1
Last login: Wed Aug  7 22:24:19 2013 from 192.168.0.25
[hbase @slave1 ~]$ exit
logout
Connection to slave1 closed.
其它节点依次类推。




 
2.6    基础环境
已经安装jdk1.7_51
3      程序安装
3.1    assandra
3.1.1  第一步:解压




[hbase@ node5 ~]$ tar -xzf apache-cassandra-2.0.10.tar.gz




 
3.1.2  第二步:修改cassandra.yaml




[hbase@ node5 ~]$ cd apache-cassandra-2.0.10/conf/
[hadoop@slave1 conf]$ vi cassandra.yaml




 
cassandra.yaml内容





cluster_name: ‘sunrise Cluster‘
- seeds: "192.168.0.44" --> - seeds: "node IP address"
data_file_directories:
- /home/hbase/cassandra/data
commitlog_directory: /home/hbase/cassandra/commitlog
saved_caches_directory: /home/hbase/cassandra/saved_caches
listen_address: 192.168.0.44
native_transport_port: 9042
rpc_address: 192.168.0.44
rpc_port: 9160





 
cluster_name:这个配置项是用来标识集群名称的。
data_file_directories:这个配置项是用来配置Cassandra数据目录的。
commitlog_directory: 这个配置项是用来配置Cassandra提交日志目录的。
saved_caches_directory:这个配置项是用来配置Cassandra缓存目录的。
listen_address:这个配置项定义了集群中其他节点的连接方式。所以多节点的集群必须将这个改成他实际的网卡地址。
listen_address:这个配置项定义了集群中其他节点的连接方式。所以多节点的集群必须将这个改成他实际的网卡地址。
rpc_address:这个配置项定义了这个节点在哪里监听客户端。所以可以跟node的IP地址一样,或者设置为0.0.0.0,如果我们想在所有的可用网卡接口上监听的话。
Seeds:seeds作为连接点,当一个新的节点加入到集群中的时候,他联系seeds得到其他节点的一些基础信息。所以在多节点中,作为种子的节点必须是所有的节点都可以通过路由连接到的。注:在多节点的集群中,最好拥有多个seeds。多个节点作为seeds可以通过如下方式定义。
3.1.3  第三步:测试
启动:




Node1 – node8




[hbase@node5 cassandra




 
查看状态




Node5




[hbase@node5 apache-cassandra-2.0.10]$ ./bin/nodetool -host 192.168.0.44 -p 7199 status
UN  192.168.0.45  215.5 KB   256     12.8%  55a15b62-b3a9-4fa3-ad76-284ce8132ff5  rack1
UN  192.168.0.44  204.95 KB  256     11.6%  4b736f9e-d904-4d69-80f3-66492a1a0344  rack1
UN  192.168.0.47  207.25 KB  256     13.7%  0744e75b-dc9e-4be3-9cd4-9a803f141abb  rack1
UN  192.168.0.46  202.26 KB  256     12.4%  e2087e1a-6c06-4b24-9355-f27890b0e9c6  rack1
UN  192.168.0.41  180.9 KB   256     13.0%  7aac038a-8bf7-45d7-b385-a2c434ed96ff  rack1
UN  192.168.0.40  189.13 KB  256     12.7%  de8cb5e2-fce3-4735-bfc0-c21f51b1e7d8  rack1
UN  192.168.0.43  184.23 KB  256     12.3%  3ef670c3-d61e-406f-b853-20a06747cd21  rack1
UN  192.168.0.42  184.83 KB  256     11.5%  3055f3e2-7003-440c-a198-e7ff7c862ec0  rack1




创建keyspace、user表、插入数据




Node5




[hbase@node5 apache-cassandra-2.0.10]$ ./bin/cqlsh -u cassandra -p cassandra 192.168.0.44 9160
[cqlsh 4.1.1 | Cassandra 2.0.10 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh> CREATE KEYSPACE munion_db WITH REPLICATION = { ‘class‘ : ‘SimpleStrategy‘, ‘replication_factor‘ : 2 };
cqlsh>use munion_db;
cqlsh>create table users(user_id int primary key, fname varchar,lname varchar);
cqlsh> INSERT INTO users (user_id,  fname, lname)  VALUES (1744, ‘john‘, ‘smith‘);
cqlsh> INSERT INTO users (user_id,  fname, lname)  VALUES (1745, ‘john‘, ‘doe‘);
cqlsh> INSERT INTO users (user_id,  fname, lname)  VALUES (1746, ‘john‘, ‘smith‘);
cqlsh> INSERT INTO users (user_id,  fname, lname)  VALUES (1747, ‘测试‘, ‘测试‘);
cqlsh>select * from users;
user_id | fname | lname
---------+-------+---------
    1744 |  john |   smith
    1745 |  john |     doe
1746 |  john |   smith
    1747 |  测试|   测试




 
3.2    Presto
3.2.1  第一步:解压




[hbase@node5~]$ tar -xzf presto-server-0.75.tar.gz
[hbase@node5~]$ cd presto-server-0.75




3.2.2  第二步:配置node.Properties
配置文件内容:




node.environment=pretest
node.id=node5
node.data-dir=/home/hbase/presto-server-0.57/presto/data




3.2.3  第三步:配置jvm.config
配置文件内容:




node.environment=pretest
node.id=node5
node.data-dir=/home/hbase/presto-server-0.57/presto/data
[hbase@node5 etc]$ cat jvm.config
-server
-Xmx6G
-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:/home/hbase/presto-server-0.57/lib/floatingdecimal-0.1.jar
-Djava.library.path=/home/hbase/hadoop/lib/native/Linux-amd64-64>




3.2.4  第四步:配置config.properties
 
配置文件内容




coordinator=true #node5,其他节点设为false
#node-scheduler.include-coordinator=false
http-server.http.port=40000
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=//node5:40000




3.2.5  第五步:配置log.properties




com.facebook.presto=INFO




 
3.2.6  第六步:配置CatalogProperties
编辑Catalog Properties文件,添加如下内容




connector.name=cassandra
cassandra.contact-points=node1,node2,node3,node4,node5,node6,node7,node8




 
3.2.7  第七步:测试
启动Presto,命令如下:




[hbase@node5 ~]$ cd /home/hbase/presto-server-0.75
[hbase@node5 ~]$./bin/launcher start
[hbase@node5 ~]$./bin/launcher start
[hbase@node5~]$./presto --server 192.168.0.44:40000 –catalog cassandra --schema munion_db
presto:munion_db>select * from users;
presto:munion_db> user_id | fname | lname
---------+-------+---------
    1744 |  john |   smith
    1745 |  john |     doe
1746 |  john |   smith
    1747 |  测试|   测试




4      功能测试
4.1    SQL支持
Create tabe/view:只支持Createtabe/view as select …
支持连接:Inner join、left join、right join
聚合函数:支持count、max、min等
4.2    数据导入
支持insert操作;
支持copy导入数据;
支持kettle导入数据;
4.3    JDBC支持
支持程序使用JDBC接口;
Java客户端调用JDBC出错;
报表工具连接JDBC源有待验证;
5      性能测试
未做。
6      总结
相对于Hadoop/Hive/HBase/Spark,Cassandra+Presto不失为一种大数据的敏捷方案。
Kettle提供了Cassandra的ETL组件,CQLSH提供了类似于ER的数据模型,Presto提供了跨数据源的交叉查询能力,并提供了丰富的SQL功能。此外,JDBC驱动提供了对程序、客户端工具及报表工具的连接能力。
7      未尽…
因为时间和人力资源限制,不得不停止Cassandra+Presto的测试验证工作,进一步的性
能测试也没能去测。尽管如此,该方案仍然可认为是可行的。也许,在将来某个时间,Cassandra+Presto将被重新提及,并被采用。


Presto升级很快,现在已经到了0.78版本,在0.77中已经实现了分布式Hash功能,尽管还处于试验阶段。相对与Hadoop/HBase/Hive/Spark来说,采用Flume+Cassandra+Presto+SpagoBI无疑是一个敏捷的大数据解决方案。希望能对准备使用大数据的同道们有所帮助!    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据应用频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved