基于FacebookPresto+Cassandra的敏捷式大数据

文件夹

1

1.1

1.1.1

1.1.2

1.2

1.2.1

1.2.2

2

2.1

2.2

2.3

2.4

2.5

2.6

3

3.1

3.1.1

3.1.2

3.1.3

3.2

3.2.1

3.2.2

3.2.3

3.2.4

3.2.5

3.2.6

3.2.7

4

4.1

4.2

4.3

5

6

7

1概 
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的架构例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hpbmFfd29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

从上图中能够看出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 的client提交到协调器。协调器负责解析、分析和安排查询到不同的 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:这个配置项定义了这个节点在哪里监听client。所以能够跟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=http://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接口;

Javaclient调用JDBC出错;

报表工具连接JDBC源有待验证;

5      性能測试

未做。

6      总结

相对于Hadoop/Hive/HBase/Spark,Cassandra+Presto不失为一种大数据的敏捷方案。

Kettle提供了Cassandra的ETL组件。CQLSH提供了类似于ER的数据模型,Presto提供了跨数据源的交叉查询能力,并提供了丰富的SQL功能。

此外,JDBC驱动提供了对程序、client工具及报表工具的连接能力。

7      未尽…

由于时间和人力资源限制,不得不停止Cassandra+Presto的測试验证工作,进一步的性

能測试也没能去測。虽然如此,该方案仍然可觉得是可行的。或许,在将来某个时间,Cassandra+Presto将被又一次提及。并被採用。

Presto升级非常快,如今已经到了0.78版本号,在0.77中已经实现了分布式Hash功能。虽然还处于试验阶段。相对与Hadoop/HBase/Hive/Spark来说。採用Flume+Cassandra+Presto+SpagoBI无疑是一个敏捷的大数据解决方式。

希望能对准备使用大数据的同道们有所帮助!

低调、奢华、有内涵的敏捷式大数据方案:Flume+Cassandra+Presto+SpagoBI的更多相关文章

  1. 流式大数据计算实践(1)----Hadoop单机模式

    一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...

  2. SDP(10):文本式大数据运算环境-MongoDB-Engine功能设计

    为了让前面规划的互联网+数据平台能有效对电子商务数据进行管理及实现大数据统计功能,必须在平台上再增加一个MongDB-Engine:数据平台用户通过传入一种Context来指示MongoDB-Engi ...

  3. 大数据(9) - Flume的安装与使用

    Flume简介 --(实时抽取数据的工具) 1) Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. 2) Flume基于流式架构 ...

  4. 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine

    双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...

  5. spark + cassandra +postgres +codis 大数据方案

    1.环境: 1.1.cassandra 集群: 用于日志数据存储 1.2.spark集群: 用户后期的实时计算及批处理 1.3.codis 集群: 用于缓存一些基本数据如IP归属地,IP经纬度等,当日 ...

  6. FusionInsight大数据开发---Flume应用开发

    Flume应用开发 要求: 了解Flume应用开发适用场景 掌握Flume应用开发 Flume应用场景Flume的核心是把数据从数据源收集过来,在送到目的地.为了保证输送一定成功,发送到目的地之前,会 ...

  7. 流式大数据计算实践(6)----Storm简介&使用&安装

    一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...

  8. 流式大数据计算实践(7)----Hive安装

    一.前言 1.这一文学习使用Hive 二.Hive介绍与安装 Hive介绍:Hive是基于Hadoop的一个数据仓库工具,可以通过HQL语句(类似SQL)来操作HDFS上面的数据,其原理就是将用户写的 ...

  9. 流式大数据计算实践(5)----HBase使用&SpringBoot集成

    一.前言 1.上文中我们搭建好了一套HBase集群环境,这一文我们学习一下HBase的基本操作和客户端API的使用 二.shell操作 先通过命令进入HBase的命令行操作 /work/soft/hb ...

随机推荐

  1. nyoj--44--子串和(动态规划)

    子串和 时间限制:5000 ms  |  内存限制:65535 KB 难度:3 描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大, ...

  2. linux下nmap工具的使用

    NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统 ...

  3. springboot @WebFilter过滤器的使用

    过滤器的用法就不多说了 新建Filter的继承类:MemberFilter(放置包需要注意) @WebFilter(urlPatterns = "/*") @Order(1) pu ...

  4. C Linux read write function extension

    前言 - 赠送 readn / writen Linux 上默认的 read 和 write 函数会被信号软中断. 且 read 和 write 函数中第三个参数 count #include < ...

  5. Java中从控制台输入数据的几种常用方法(转转)

    原文博客地址:https://www.cnblogs.com/SzBlog/p/5404246.html 一.使用标准输入串System.in  //System.in.read()一次只读入一个字节 ...

  6. Centos7下git服务器及gogs部署

    1.安装git # yum install -y git 2.创建git用户及组 # groupadd git # adduser git -g git # mkdir /home/git # mkd ...

  7. swift的计算属性和懒加载

    计算属性每次都重新计算. 懒加载只计算一次. 可以借助backing store将计算属性转化为懒加载属性. 计算属性实质上退化为函数调用. 计算属性的标示是get.set.

  8. strusts2_json

    引用别人的 Struts.xml <package name="default" extends ="json-default" > <act ...

  9. mysql_connect() 不支持 请检查 mysql 模块是否正确加载

    php的扩展 没有配置好! 打开php.ini文件: 搜索pdo_mysql和curl ;extension=php_curl.dll ;extension=pdo_mysql.dll 然后把2者前面 ...

  10. java 监听控制台输入

    分享一下我写的java监听控制台输入并可以给出响应的功能. 很多时候需要监听控制台的输入内容,相当于信号监听,根据输入的内容做出相应的动作,这里给出我的一个简单实现. 要注意的是:监听得到的消息中前后 ...