spark的生态圈

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


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

1.Spark core
SparkCore是整个生态圈的核心组件,是一个大数据分布式编程框架,不仅实现了MR的map函数和reduce函数及其计算模型,还提供很多实现其他功能的算子,如filter、join、groupByKey等。Spark将分布式数据抽象为弹性分布式数据集RDD,实现了应用任务调度、RPC、序列化、内存管理、错误恢复、与存储系统交互和压缩等模块功能,并为运行在其上的上层组件提供API。其底层采用scala这种函数式语言书写而成,并且所提供的API深度借鉴scala函数式的编程思想,提供与scala类似的编程接口。Spark将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理。 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用来操作结构化数据的程序包。 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 等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值