您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>数值算法/人工智能>

大数据操作系统转型分析smack堆栈

大小:0.6 MB 人气: 2017-09-30 需要积分:1

  从大数据到快速数据

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

  SMACK堆栈

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

  Spark作为一个通用、快速、内存中的大数据处理引擎;

  Mesos作为集群资源管理器;

  Akka作为一个基于Scala的框架,允许我们开发容错、分布式、并发应用程序;

  Cassandra作为一个分布式、高可用性存储层;

  Kafka作为分布式消息代理/日志。

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

  Apache Spark

  Apache Spark已经成为一种“大数据操作系统”。数据被加载并保存到簇存储器中,并且可以被重复查询。这使得Spark对机器学习算法特别有效。Spark为批处理、流式处理(以微批处理方式)、图形分析和机器学习任务提供统一的接口。它用Scala编写,并公开了Scala、JavaPython和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)中的播放列表建模:

  大数据操作系统转型分析smack堆栈

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

  CQL查询如下所示:

  大数据操作系统转型分析smack堆栈

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

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

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!