大数据融合架构SMACK-庖丁解牛

大数据融合架构SMACK-庖丁解牛

简介:在年谈大数据技术时,如果只知道Hadoop就落伍了。你还得知道最新窜红的Spark,不过到了年,将不再是单一的Spark技术而已。一位瑞典大数据开发者AntonKirillov于斯德哥尔摩BigDataMeetup中提出了由Spark、Mesos、Akka、Cassandra和Kafka这5项新兴大数据技术组合成的SMACK架构。本文将为大家介绍SMACK架构中的各个“零件”,以及这些“零件”是如何组合的。

在SMACK架构中,Kafka负责事件的传输,Cassandra用于保存和分发事件。Spark与Akka可以组合使用,建立许多数据分析管道,以满足处理海量数据集与事件所需的吞吐量和时延约束。Mesos作为一个任务协调者,便于任务和作业在集群中的分发。

存储层:Cassandra

ApacheCassandra是一个开源的分布式NoSQL数据库管理系统,基于大量商用服务器实现对海量数据的处理,并提供无单点故障的高可用性。Cassandra为跨多数据中心的集群提供健壮的支持,拥有无中心化的异步复制特性,从而能够支持所有客户端对于数据的低延迟操作。

Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去。对Cassandra的读操作,也会被路由到某个节点上面去读取。并且,对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。从技术实现上来讲,Cassandra同时具备AWSDynamo和GoogleBigTable的设计理念,同时引入了P2P技术,具备大规模可分区行存储能力。其具有以下特性:

强调AP,实现了最终一致性;

具备多数据中心复制的能力,拥有市场上最具有竞争力的线性可扩展性;

无中心节点从而避免单节点故障;

configurableCA,一致性和时延可调;

每个节点只有一个进程等大数据存储管理的先进特点,并支持与Spark、Storm、Hadoop的集成。

分析层:Spark

Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,不同之处在于Spark的Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的算法。换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,通过名为Mesos的第三方集群框架可以在Hadoop文件系统中并行的运行。

Spark+Cassandra集群架构

上图是Spark与Cassandra结合的架构图,将写数据与数据分析隔离开,分为重度写集群与分析集群,两个集群之间相互连通,通过Cassandra的复制能力将重度写集群中的数据同步到分析集群中,以便使用Spark在分析集群中进行挖掘分析。为使Spark能够快速的访问Cassandra数据,Sparkworkers需要与Cassandra节点一并安装在同一节点上,以实现本地化快速访问。采用以上架构具有以下优点:

重度写集群与分析集群相互独立,能够单独的调整自身规模,具有很强的灵活性;

重度写集群与分析集群中的数据流通,由Cassandra进行异步复制来实现,保证数据一致性;

重度写集群与分析集群具有不同的读/写负载模式,从而能够根据自身业务特点最大化利用硬件资源;

分析集群相比重度写集群,包含有更多的数据,例如中间处理产生的数据和分析出的结果;

Spark资源的影响仅限于分析集群,对重度写集群没有影响。

资源管理层:Mesos

ApacheMesos是一个开源的资源管理系统,可以对集群中的资源做弹性管理。它在分布式程序之间和框架间,提供了有效的资源隔离与共享。其能够以一种细粒度的方式实现资源管理,以提高整个集群的利用率。目前Twitter,Apple等公司在大量使用Mesos来管理其集群资源。

如上图所示,Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行信息,使用MultiPaxos进行日志复制,实现一致性。Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键信息,如任务信息状态,更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务。

Mesos实现了两级调度架构,它可以管理多种类型的应用程序。第一级调度是Master的守护进程,管理Mesos集群中所有节点上运行的Slave守护进程。集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如Hadoop和MPI作业。第二级调度由被称作Framework的“组件”组成。Framework包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器。Mesos能和不同类型的Framework进行通信,每种Framework由相应的应用集群管理。MesosMaster协调全部的Slave,并确定每个节点的可用资源,聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework(作为Master的客户端)发出资源邀约。Framework可以根据应用程序的需求,选择接受或拒绝来自master的资源邀约。一旦接受邀约,Master即协调Framework和Slave,调度参与节点上的任务,并在容器中执行,以使多种类型的任务,比如Spark和Cassandra,可以在同一个节点上同时运行。

Spark、Mesos、Cassandra的联合部署

上图是Spark、Mesos、Cassandra联合部署的架构。其中,MesosMasters与ZooKeepers并列部署在相同的节点上。MesosSlaves与Cassandra节点并列部署,使Spark更方便的本地化访问数据。至此,将Spark、Mesos、Cassandra这三者结合在了一起。

目前,所面临的新问题是数据接入,即数据接入架构如何实现。数据接入架构需要具备以下特性:高吞吐、可恢复性、易扩展、高背压能力。为满足这些要求,在此引入Akka。

数据接入层:Akka

Akka是一个开放源代码的工具包,能够在JVM上简化并行和分布式应用的构建。使用Akka框架能更轻松地开发可扩展、多线程安全的应用。目前,大多数流行的语言在实现并发时,都是基于多线程之间的共享内存,使用同步方法防止多线程之间的写争夺,这样的机制相对于Akka使用的Actors来说效率较低。

什么是Actor?

Actors提供一个简单统一模型:

隔离计算实体;

"Sharenothing";

没有任何地方同步;

异步消息传递;

不可变的消息;

Actors有类似消息的mailbox/queue。

为什么使用Akka?

1.垂直扩展能力Scaleup

Akkaactors是轻量级的,能够在一个系统内轻松创建数千个实例。而线程是重量的,在场景切换时相当慢,不能够满足接入数据时对于高吞吐量和低时延的要求。

2.横向扩展能力Scaleout

Akkaactors具有很强的横向扩展性,能够容易的从一个单节点进程扩展到一个集群的机器中,并且在代码没有任何修改时可在远程运行失败恢复和错误处理。

Akka与Cassandra

使用Akka执行批处理任务直接将原始数据写入Cassandra是容易且高效的。但是,同样要保证原始数据入库的可靠性,不能发生丢失原始数据的异常情况。因此,需要在Akka与Cassandra之间引入Kafka来承担数据管道任务,从而满足数据接入对于高背压能力的要求。

到目前为止,整个架构如上图所示。在需要对原始数据进行预汇总时,Akka直接接入Cassandra的组合就不再适用了。因为,Cassandra适用于快速的数据响应,但不适合对数据进行批量处理。而Akka由于其采用了无状态的设计模型,并不适合承担对数据进行汇总的任务。因此,在导入Cassandra之前的数据预汇总操作采用SparkStreaming来承担。至此,一个完整的SMACK架构已经成型,如下图所示。

此架构具有以下特点:

采用久经考验并且广泛使用的开源软件,并且拥有大型社区支持;

具有较强的扩展性,并在复制数据时能够保证较低的延迟;

对异构负载使用统一的集群管理,从而能够合理的利用整个集群资源;

一种平台架构能够应对多种应用需求;

从数据的产生到分析出结果,能够真正的做到低时延。

结束语

本文介绍了一种能够应对多种应用需求的大数据平台架构-SMACK。从最底层的数据层Cassandra开始,对整个架构中所使用的各类开源技术进行了介绍,包括:分析层:Spark、资源管理层:Mesos、数据接入层:Akka、数据传输层:Kafka,以及预统层:SparkStreaming。并对各个层之间的接口设计进行了说明。技术在创新,业务在发展,数据分析架构也要能满足不断变化的需求,进行不断的创新与变化。

-END-

声明:

本文为中国联通网研院网优网管部IT技术研究团队独家提供。

如需转载或合作,请联系管理员(zhouyh

dimpt.







































北京那个医院治白癜风最好
白癜风医院在哪里



转载请注明:http://www.92nongye.com/ksfc/204612736.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了