Spark系统中,其核心框架是spark core,同时涵盖支持结构化数据SQL查询与分析的查询引擎Spark SQL和shark,提供机器学习功能的系统MLbase及底层的分布式机器学习库MLlib,并行图计算框架GraphX、流计算框架SparkStreaming。采样近似计算查询引擎BlinkDB、内存分布式文件系统Tachyon、资源管理框架等子项目。如下图所示:

spark 生态 spark生态圈以什么为核心_MLlib



下面对生态圈中的各个子项目进行介绍如下:


1.Spark core



Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称 RDD)的 API 定义。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是Spark 主要的编程抽象。





2.Shark



Shark是构建在spark和hive基础之上的数据仓库。目前,shark已经停止开发,它提供了能够查询hive中所存储数据的一套SQL接口,兼容现有的HQL语法。Shark底层复用hive的解析器、优化器以及元数据存储和序列化接口。Shark会将HQL语句编译转化为一组spark任务,进行分布式运算。





3.Spark SQL



Spark SQL 是在 Spark 1.0 中被引入的。在 Spark SQL 之前,加州大学伯克利分校曾经尝试修改 Apache Hive 以使其运行在 Spark上,当时的项目叫作 Shark。现在,由于 Spark SQL 与 Spark 引擎和 API 的结合更紧密,Shark 已经被 Spark SQL 所取代。





spark SQL使用catalyst做查询解析和优化器,并在底层使用spark作为执行引擎实现SQL的operator。用户可以在spark上直接书写SQL或者HQL语句来查询语句,相当于为spark扩充了一套算子,这丰富了spark的算子和功能,同时spark SQL不断兼容不同的持久化存储(HDFS、Hive等)。





Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。除了为Spark提供了一个 SQL 接口,Spark SQL还支持开发者将SQL和传统的RDD编程的数据操作方式相结合,不论是使用 Python、Java 还是 Scala语言,开发者都可以在单个应用中同时使用 SQL和复杂的数据分析。通过与 Spark所提供的丰富的计算环境进行如此紧密的结合,Spark SQL得以从其他开源数据仓库工具中脱颖而出。





4.Spark Streaming



Spark Streaming是Spark提供的对实时数据进行流式计算的组件。比如生产环境中的网页服务器日志,或是网络服务中用户提交的状态更新组成的消息队列,都是数据流。Spark streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理,其吞吐量能够超越现有主流流处理框架storm,并提供丰富的API用于流数据计算。从底层设计来看,Spark Streaming支持与Spark Core同级别的容错性、吞吐量以及可伸缩性。





5.GraphX



GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,它基于BSP模型,在spark之上封装类似Pregel的接口,可以进行大规模同步全局的图计算。尤其是当用户进行多轮迭代时,由于spark可以进行内存持久化存储,基于spark内存计算的优势尤为明显。





与 Spark Streaming 和 Spark SQL 类似,GraphX 也扩展了 Spark 的 RDD API,能用来创建一个顶点和边都包含任意属性的有向图。GraphX 还支持针对图的各种操作(比如进行图分割的 subgraph 和操作所有顶点的 mapVertices ),以及一些常用图算法(比如 PageRank和三角计数)。





6.MLlib



Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作 MLlib。MLlib 提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。





7.Alluxio



Alluxio,也就是以前的Tachyon,是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离Java Heap。用户可以基于Alluxio实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据的可靠性。





8.BlinkDB



BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎。它允许用户在查询准确性和查询响应时间之间做出权衡,完成近似查询。其数据的精度被控制在允许的误差范围内。为了实现这个目标,BlinkDB的核心思想是:通过一个自适应优化框架,随着时间的推移,从原始数据建立并维护一组多维样本;通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响应时间满足用户查询需求。





9.Mesos



就底层而言,Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(cluster manager)上运行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自带的一个简易调度器,叫作独立调度器(Standalone Scheduler)。用户可以在其中插件式地运行spark、mapreduce、tez等计算框架的任务。mesos和yarn会对资源和任务进行隔离,并实现高效的资源任务调度。




10.Spark的存储层次


我们需要知道的是Hadoop 并非 Spark 的必要条件,Spark 不仅可以将任何 Hadoop 分布式文件系统(HDFS)上的文件读取为分布式数据集(RDD),也可以支持其他任何实现了 Hadoop 接口的系统,比如本地文件、亚马逊 S3、Cassandra、Hive、HBase 等。Spark 支持的 Hadoop 输入格式包括文本文件、SequenceFile、Avro、Parquet 等。