使用SMACK堆栈进行快速数据分析

作者:马小龙,浙江财经大学数据分析和大数据计算的客座教授。2006年在德国不来梅大学获得数学博士学位后,在多特蒙德大学软件工程研究所从事研究和教学工作直到2011年来到中国。
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

从大数据到快速数据

除了能够以批处理模式分析大型数据集之外,现代数据驱动型组织还需要尽快从所收集的数据中生成洞察,并最终采取行动。在这方面,传统的Hadoop堆栈(HDFS作为存储层,MapReduce或Tez作为处理框架,YARN作为集群资源管理器)缺乏严重性。为了减轻这种情况,业界已经提出了诸如Lambda架构(见《程序员》2016年11月“Lambda与Kappa计算架构之我见”一文)等架构。在Lambda架构中,一个“慢”大数据处理框架(如Hadoop堆栈)与一个“快速”的流处理框架(如Apache Storm)组合在一起。由快速框架处理的数据或者与慢速处理框架周期性地重新集成,或者完全丢弃,并且由使用慢速处理框架处理的数据代替。当然,这种Lambda型结构并不是没有问题,它会导致代码重复和需要重新处理与集成数据。

SMACK堆栈

所谓的SMACK堆栈是一个在过去一年中变得流行的架构。SMACK堆栈的各部分如下:

  1. Spark作为一个通用、快速、内存中的大数据处理引擎;
  2. Mesos作为集群资源管理器;
  3. Akka作为一个基于Scala的框架,允许我们开发容错、分布式、并发应用程序;
  4. Cassandra作为一个分布式、高可用性存储层;
  5. Kafka作为分布式消息代理/日志。

首先我们将快速讨论组成SMACK堆栈的部件,特别注意Cassandra,因为它与堆栈的其他部分不同,似乎没有在国内广泛使用。

Apache Spark
Apache Spark已经成为一种“大数据操作系统”。数据被加载并保存到簇存储器中,并且可以被重复查询。这使得Spark对机器学习算法特别有效。Spark为批处理、流式处理(以微批处理方式)、图形分析和机器学习任务提供统一的接口。它用Scala编写,并公开了Scala、Java、Python和R的API。此外,Spark能够对数据执行SQL查询,更利于分析师们学习传统的BI工具。

Apache Mesos

Apache Mesos是一个开源的集群管理器,由加州大学伯克利分校开发。它允许跨分布式应用程序的高效资源隔离和共享。在Mesos中,这样的分布式应用程序被称为框架。

Akka

Akka是构建在JVM上运行的并发程序框架。强调一个基于actor的并发方法:actors被当作原语,它们只通过消息而不涉及共享内存进行通信。响应消息,actors可以创建新的actors或发送其他消息。actor模型由Erlang编程语言编写,更易普及。

Apache Cassandra

Cassandra最初是在Facebook开发的,后来成为一个Apache开源项目。它是一个分布式、面向列的NoSQL数据存储,类似于Amazon的Dynamo和Google的BigTable。与其他NoSQL数据存储相反,它不依赖于HDFS作为底层文件系统,具有无主控架构,允许它具有几乎线性的可扩展性,并且易于设置和维护。Cassandra的另一个优势是支持跨数据中心复制(XDCR)。跨数据中心复制实际上有助于使用单独的工作负载和分析集群。Cassandra的企业版可从DataStax (http://www.datastax.com)获得。

根据固定分区键,数据在Cassandra集群的节点上分割。其架构意味着它没有单点故障。根据CAP定理,我们可以在每个表的基础上对一致性和可用性进行微调。

Apache Kafka

在SMACK堆栈内,Kafka负责事件传输。Kafka集群在SMACK堆栈中充当消息主干,可以跨集群复制消息,并将其永久保存到磁盘以防止数据丢失。

在详细了解SMACK堆栈的各部分如何协同工作之前,我们将快速讨论Cassandra的数据模型及其在Cassandra上进行分析所面临的挑战。

Cassandra数据模型

与其他NoSQL数据存储类似,基于Cassandra应用程序的成功数据模型应该遵循“存储你查询的内容”模式。也就是说,与关系数据库相反,在关系数据库中,我们可以以标准化形式存储数据。当我们谈论Cassandra数据模型时,仍然使用术语table,但是Cassandra表的行为更像排序,分布式映射,然后是关系数据库中的表。

Cassandra支持用于定义表与插入和查询数据的SQL语言,称为Cassandra Query Language(CQL)。

当定义一个Cassandra表时,我们需要提供一个分区键,它确定数据在集群节点之间的分布方式,以及确定数据如何排序的聚簇列。当使用CQL查询时,我们只能查询(使用WHERE子句)并根据聚簇列排序。

让我们来看看Cassandra文档中的一个示例,该文档是音乐共享服务(如Spotify)中的播放列表建模:

代码1

在这个例子中,uuid(通用唯一ID,保证在多个机器之间是唯一的)id是分区键,song_order是聚类列,(id,song_order)需要在表的所有行中都是唯一的。此外,id决定了在哪个机器上存储行,song_order决定了行在物理主机上的存储顺序。也可以在Cassandra中使用复合分区键,将它们放在()中。

CQL查询如下所示:

代码2

WHERE子句中出现的任何列都要求是主键的一部分,或者可以在其上定义索引。此外,分区键只能出现在相等(=)操作中。只有当所选行的集合被作为连续块存储在主机上时,范围查询才是可行的。通过聚类SQL的类似列和LIMIT子句,CQL能够支持排序,但不具备GROUP BY的类似功能。

根据特定列进行查询,减少了对随机磁盘访问的需求,但也强烈限制了Cassandra作为分析数据库的使用。“存储你查询的内容”范例需要根据Cassandra数据库上执行的查询进行仔细地数据建模,从而限制了支持新查询的能力。为了对存储在Cassandra中的数据执行分析,应该将数据加载到单独的处理框架中,我们选择Apache Spark框架。

图1 操作集群和带有并置的Spark节点的单独的分析集群

图1 操作集群和带有并置的Spark节点的单独的分析集群

连接Spark和Cassandra

Spark-Cassandra连接器(https://github.com/datastax/spark-cassandra-connector)可以把Cassandra表作为Spark RDDs,将Spark RDDs写入Cassandra表,以及在Spark应用程序中执行任意CQL查询。如果可以,还应使用CQL WHERE子句将筛选操作下推到服务器端节点。

为了最大化利用Spark-Cassandra连接器的数据位置感知功能,集群的Spark和Cassandra节点应并置。Cassandra的XDCR跨数据中心复制实际上允许我们分离出一个分析集群,一个Spark节点与Cassandra节点并置,一个Cassandra集群用于重写操作,其内容被自动复制到分析集群。这样,任何沉重的分析操作都不会影响纯Cassandra集群的写入性能。将操作(写入繁重)集群与分析集群分离可提供以下额外的好处:

  1. 两个集群可以独立缩放;
  2. 由于分析和操作集群具有不同的读/写模式,可以优化每个集群以实现其预期用途;
  3. Cassandra自动处理数据复制;
  4. 仅需要将其他信息(例如要与其连接的查找表)存储在分析集群上。

Mesos架构

Mesos从头开始设计,用于处理异常繁杂的工作负载,也就是说可以将长期运行的批处理作业与较短的事件处理类型任务组合在一起。
Mesos集群由两种类型的节点组成:

  1. 主节点,负责资源提供和调度;
  2. 从节点,运行实际任务。

主节点也可以复制,以提供高可用性。在这种情况下,Zookeeper可以用于领导选举和服务发现。使用Mesos执行任务的过程遵循以下步骤:

  1. 从节点向主节点发布可用资源;
  2. 主节点发送资源到框架(App);
  3. 框架中的调度程序回复需要被调度的任务;
  4. 任务由主机发送到从机。

两个工具帮助我们使用Mesos计划作业:Marathon旨在安排长时间运行的任务;Chronos的行为就像一个“分布式cron”,重复执行短时间运行的任务。我们可以用以下方式部署Spark/Mesos/ Cassandra集群:

  1. Mesos主节点与Zookeeper节点并置;
  2. Cassandra节点与Spark执行器节点并置。

图2 Cassandra和Spark的Mesos部署方案

图2 Cassandra和Spark的Mesos部署方案

使用Akka进行数据摄取

选择合适的存储层后,现在需要决定如何处理传入数据。对数据摄取层的要求是:

  1. 低延迟和高吞吐量
  2. 弹性
  3. 可扩展性
  4. 背压手柄负载尖峰

actor完全满足前三点,例如从HTTP请求中处理每个传入事件并将其存储在Cassandra中。

使用Kafka进行预处理

Akka无状态设计的一个缺点是:actor不能执行任何的数据预处理。Cassandra同样不适合。使用Spark或Spark Streaming执行这种预聚合也不理想,因为Spark Streaming的微批处理架构并不适用于快速事件处理。

Apache Kafka是合适的备选。因此在SMACK堆栈中,Akka actors将预处理数据写入分布式日志,如Apache Kafka。为了从Kafka读取数据,可以依靠Spark Streaming,使用Spark Streaming可以将数据备份到HDFS或对象存储(如Amazon S3或阿里云OSS),同时将其写入Cassandra群集。这充当了有效的备份机制,并且根据用例,OSS/S3的存储成本可能远低于在Kafka集群中保留数据。然后可以使用Spark从对象存储中恢复数据。在对象存储中非现场存储数据还可防止任何数据中心级故障对组织数据带来严重影响。

结论

SMACK堆栈具有以下优点:

  1. 简单工具箱,支持各种数据处理任务(流式、批处理、Lambda类型的架构);
  2. 依靠经过测试的开源框架;
  3. 统一集群管理;
  4. 易于扩展和复制。

图3 SMACK堆栈架构概述

图3 SMACK堆栈架构概述

此外,应用程序中必须写入特定代码的主要组件(Akka、Kafka、Spark)都可以使用Scala进行编程,从而允许在架构的不同部分有效共享业务逻辑类型的代码。


订阅2017年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
图片描述

[云框架]SMACK大数据架构-用户指南 [Cloud Frameworks]SMACK Big Data Architecture - user guide / [云框架]SMACK大数据架构-用户指南 立即下载

相关推荐

Python和HDF5大数据应用

完整版《Python和HDF5大数据应用》 本书会带你迅速了解使用HDF5对大小从GB至TB的数字数据集进行存档和共享的细节、实践以及陷阱,体验在Python语言中用HDF5存储科学数据。   通过真实世界的例子以及动手练习,你将依次学习科学数据集、层次性组织的组、用户定义的元数据,以及有互操作性的文件等主题。本书的例子对于Python2和Python3都适用。

大数据平台架构(Lambda、Kappa、SMACK)

大数据平台的架构和企业级应用的架构是很不一样的,使用的技术也不同。经过多年的发展,业界已孕育出了一些较为成熟的架构模式, 如Lambda架构、Kappa架构及Smack架构。 1、Lambda架构 Lambda架构是大数据平台里最成熟、最稳定的架构,它的核心思想是:将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离。 (图片来源于网络) 标准的Lambda架构有如下几个层次: (1)Batch Laye:主要负责所有的批处理操作,支撑该层的技术也以Hive、Spark-SQL或.

高国才的博客 1895

数据处理平台架构中的SMACK组合:Spark、Mesos、Akka、Cassandra以及Kafka

摘要:在今天的文章中,我们将着重探讨如何利用SMACK(即Spark、Mesos、Akka、Cassandra以及Kafka)堆栈构建可扩展数据处理平台。虽然这套堆栈仅由数个简单部分组成,但其能够实现大量不同系统设计。除了纯粹的批量或者流处理机制之外,我们亦可借此实现复杂的Lambda以及Kappa架构。在今天的文章中,我们将着重探讨如何利用SMACK(即Spark、Mesos、Akka、Cassandra以及Kafka)堆栈构建可扩展数据处理平台。虽然这套堆栈仅由数个简单部分组成,但其能够实现大量不同系统设计。除了纯粹的批量或者流处理机制之外,我们亦可借此实现复杂的Lambda以及Kappa

推荐开源项目:SMACK - 软件验证工具链与自含式验证器

推荐开源项目:SMACK - 软件验证工具链与自含式验证器 项目介绍 SMACK是一个模块化的软件验证工具链,同时也是一款自我包含的软件验证器。它旨在验证输入程序中的断言,对于循环和递归深度有特定限制。此外,SMACK还具备实验性的无界验证支持。这个工具处理C语言的复杂特性,如动态内存分配、指针运算以及位操作,使得在保证代码安全性和正确性方面更加强大。 SMACK的核心是将LLVM编译器的中间表示...

gitblog_00069的博客 616

Python爬虫实战:5分钟搞定Boss直聘数据抓取(附完整代理IP配置)

本文详细介绍了如何使用Python爬虫高效抓取Boss直聘的招聘数据,包括环境配置、反爬策略、数据采集与存储、数据分析等完整流程。通过实战案例,帮助开发者快速掌握招聘市场数据抓取技术,为职业决策提供数据支持。

weixin_30832143的博客 346

从Arduino IDE到Atmel Studio:ATmega328P开发的进阶之路

本文探讨了从Arduino IDE转向Atmel Studio进行ATmega328P开发的进阶路径。通过对比两者差异,详细介绍了Atmel Studio的环境配置、寄存器操作思维、烧录方法及高级调试功能,帮助开发者突破Arduino的封装限制,实现对单片机底层硬件的精细控制与性能优化,提升嵌入式开发的专业能力。

weixin_29193259的博客 122

[云框架]SMACK大数据架构

Github地址:https://github.com/cloudframe... SMACK是一种数据处理的技术组合,S 代表 Spark (引擎)、M 代表 Mesos (容器)、A 代表 Akka (模型)、C 代表 Cassandra (存储)、K 代表 Kafka (消息队列)。 面对数据源数量急剧增加、数据样本获取难度升高、数...

weixin_33843409的博客 224

发那科机器人Modbus通讯配置全攻略:从IP设置到信号调试

本文详细介绍了发那科机器人Modbus通讯的配置方法,从基础认知到IP设置、端口配置、信号调试及故障排查。重点讲解了UOP和DI/DO信号的配置技巧,帮助工程师快速实现机器人与PLC的稳定通讯,提升自动化系统效率。

weixin_27872611的博客 620

Smack 体系结构

Smack 体系结构 Zhuam (zhuam... @gmail.com) 摘要: 本文从宏观上介绍Smack类库的基本架构以及源代码的组织方式,并不会涉及太多的代码细节,如果你想从整体了解Smack,有必要一读。 Smack 在我看来可以分为三个基本层面(通讯层、协议层、核心Wrapper层),注:软件分层的看法各不同,可能我认为这样划分比较好,你也可能觉得你的划分...

Chinaxxren 412

雷达信号处理DDC数字下变频

由于接收到的雷达信号频率较高,不能对其进行直接采样并数据处理,所以需要对雷达信号进行预处理,在降低其采样率的同时,将其由中频降低到低频,然后对输出的基带信号进行后续的解析,以便于获取雷达信号的特征参数。 本文采用数字正交下变频,将单通道信号转化为正交双通道信号,数字下变频(DDC)的原型为模拟下变频,通过对窄带雷达信号或单频信号进行数字混频,然后对信号进行正交采样,提取 I、Q 两路正交分量,最后通过滤波去除信号中的高频分量,将信号由中高频搬移至低频。 模拟下变频的系统框图如下: 其数学推导.

qq_44033461的博客 5227

Unity集成阿里云语音AI:从麦克风录音到实时语音合成的全流程实现

本文详细介绍了在Unity中集成阿里云语音AI服务,实现从麦克风录音到实时语音合成的完整流程。通过调用阿里云的语音转文字和文字转语音接口,开发者可以快速为游戏或应用添加语音交互功能,提升用户体验。文章涵盖了环境配置、签名认证、音频处理及项目集成等核心步骤,并提供了实用的调试技巧。

weixin_29224589的博客 323

mysql校验日期是否有效_Mysql 根据出生日期计算年龄 判断起始日期是否在某个有效时间段内等日期Hack汇总...

关于Mysql格式化等常见日期处理相关函数说明,大家可以参考之前的一篇博文:mysql 根据出生日期计算年龄、日期格式化等常见日期处理相关函数使用汇总。根据以往的项目经验,本文总结并汇总了一些Mysql日期处理Hack。1、根据出生日期计算年龄比如员工信息表,基本上都会有出生日期字段,一来可知晓员工年龄,二来员工过生日了可以提前发点福利。根据出生日期计算年龄,本文只提供最简单也是高效的方法。比如,...

weixin_30844603的博客 933

莫兰指数stata命令_一文读懂16个sp系列stata空间计量命令及应用

spcompress:Compress Stata-format shapefile压缩数据成stata格式的shapefile2、Looking at data/观测数据2、Looking at data/观测数据grmap:Graph choropleth maps绘制等值区域图spdistance:Calculator for distance between places计算区域之间距离3...

weixin_39719989的博客 821

DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

这篇文章入选优快云极客头条 http://geek.youkuaiyun.com/news/detail/71572 当前,要保证业务的市场竞争力,仅靠设计一个可用并且好看的产品,已经完全不能满足要求。全球消费者都希望产品能够足够的智能化,通过大数据分析来改善他们的用户体验。简言之,物联网和大数据终将成为改变生活的技术驱动力。 近几年涌现了大量的技术架构与设计模式,开发者和科学家可以利

刘超的通俗云计算 2937

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128

Python 爬虫实战:淘宝直播间实时数据抓取(弹幕分析 + 流量监控)

随着电商直播的迅猛发展,淘宝直播已成为品牌推广和商品销售的重要阵地。通过爬取淘宝直播间的实时数据,包括弹幕互动和流量信息,可以帮助商家深入了解用户行为、优化直播策略,同时为市场分析和商业决策提供数据支持。本文将深入探讨如何利用 Python 爬虫技术实现对淘宝直播间实时数据的抓取,并进行弹幕分析和流量监控。

u014481728的博客 729

DC/OS Cassandra服务指南

DC/OS Cassandra服务指南 项目介绍 DC/OS Apache Cassandra是一个在Mesosphere Datacenter Operating System(DC/OS)上优化运行的Cassandra分布式数据库解决方案。它旨在提供易于安装、管理的Cassandra服务,并支持弹性扩展、高可用性及集成监控,允许组织将Cassandra作为管理服务提供。此项目利用DC/OS的...

gitblog_00355的博客 818

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《程序员》2月精彩内容:互联网应用架构面面观

来源:http://geek.youkuaiyun.com/news/detail/136459 立足互联网行业,架构通常指的是技术架构,更具体一点的说是系统架构、软件架构,或者是最常见的网站架构。本期封面报道就来探讨一下互联网时代,实战型技术架构的演进过程及其优缺点等诸多方面。 架构分享&学习之“渔”与“鱼”(张立刚,1号店技术部电商云平台技术总监)京东分布式数据库系统演进之路(张成

gb4215287的博客 1248

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【信息科学与工程学】计算机科学与自动化——第一百三十六篇 软件及工具02 Linux 底层内核参数全体系 01

这个参数体系为Linux内核的开发、调优和问题诊断提供了完整的基础。:通过sysctl、procfs等接口可配置。:基于系统特性和硬件条件设置合理默认值。参数默认值应考虑系统配置和硬件能力。需要详细的文档说明每个参数的作用。:多数参数可以在运行时动态调整。分配阶数(2^order页):每个参数都有明确的有效范围。参数访问需要适当的同步机制。SOCK_STREAM等。IPPROTO_TCP等。Guest CPU时间。__GFP_WAIT等。FMODE_READ等。TCP_CLOSE等。AppArmor状态。

weixin_49199313的博客 1046

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 最小可行性区块链原理解析
下一篇: 微信高可用分布式数据库PhxSQL设计与实现
923940cub
博客等级 码龄17年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值