Spark详解(一):Spark及其生态圈概述

1. Spark简介

Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。

  • Spark 运行速度快

在这里插入图片描述

  • 易用性好
  • 通用性强

在这里插入图片描述

  • 随处运行

在这里插入图片描述

1.1 Spark和MapReduce的比较

Spark继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:

  • Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。
  • Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。
  • Spark更加通用。

2. Spark生态系统

在这里插入图片描述

2.1 Spark Core

Spark Core是整个BDAS生态系统地核心组件,是一个分布式大数据处理框架。Spark Core中提供了多种资源部调度管理,通过内存计算、有向无环图(DAG)等机制来保证分布式计算的快速,并引入了RDD的抽象保证数据的高容错性。

  • Spark Core提供了多种运行方式,其中包括Standalone、YARN、MESOS等
  • SPark Core提供了有向无环图(DAG)的分布式计算框架,并提供了内存机制来支持多次迭代计算或者数据共享,大大减少了迭代计算之间读取数据的开销。
  • 在Spark中引入了RDD的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”对他们进行重建,保证了数据的高容错性。

2.2 Spark Streaming

SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。

在这里插入图片描述

由于使用DStreaming,Spark Streaming具有如下特性:

  • 动态负载均衡:Spark Streaming将数据划分为小批量,通过这种方式可以实现对资源更加细粒度的分配。
  • 快速故障恢复机制:在Spark中,计算将分成许多小的任务,保证能够在任何节点运行后能够正确进行合并。因此,在某个节点出现的故障的情况,这个节点的任务将均匀的分散在集群中的节点进行计算。
  • 批处理、流处理与交互式的一体化:Spark Streaming是将流式计算分解成一系列短小的批处理作业,也就是SparkStreaming的输入数据按照批处理大小,分成一段一段的离散数据流(DStream),每一段数据都转换成Spark中的RDD。

2.3 Spark SQL

Spark SQL允许开发人员直接处理RDD,同时也可查询例如在 Apache Hive上存在的外部数据。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。

Spark SQL的特点:

  • 引入了新的RDD类型SchemaRDD,可以象传统数据库定义表一样来定义SchemaRDD,SchemaRDD由定义了列数据类型的行对象构成。SchemaRDD可以从RDD转换过来,也可以从Parquet文件读入,也可以使用HiveQL从Hive中获取。

  • 内嵌了Catalyst查询优化框架,在把SQL解析成逻辑执行计划之后,利用Catalyst包里的一些类和接口,执行了一些简单的执行计划优化,最后变成RDD的计算

  • 在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。

2.4 BlinkDB

BlinkDB 是一个用于在海量数据上运行交互式 SQL 查询的大规模并行查询引擎,它允许用户通过权衡数据精度来提升查询响应时间,其数据的精度被控制在允许的误差范围内。为了达到这个目标,BlinkDB 使用两个核心思想:

  • 一个自适应优化框架,从原始数据随着时间的推移建立并维护一组多维样本;
  • 一个动态样本选择策略,选择一个适当大小的示例基于查询的准确性和(或)响应时间需求。

在这里插入图片描述

2.5 MLBase/MLlib

MLBase是Spark生态圈的一部分专注于机器学习,让机器学习的门槛更低,让一些可能并不了解机器学习的用户也能方便地使用MLbase。MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。

  • MLRuntime 基于Spark计算框架,将Spark的分布式计算应用到机器学习领域。
  • MLlib是Spark实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充;
  • MLI 是一个进行特征抽取和高级ML编程抽象的算法实现的API或平台;
  • ML Optimizer会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果

在这里插入图片描述

2.6 GraphX

GraphX是Spark中用于图和图并行计算的API,可以认为是GraphLab和Pregel在Spark上的重写和优化。跟其他分布式图计算框架相比,GraphX最大的优势是:在Spark基础上提供了一栈式数据解决方案,可以高效地完成图计算的完整流水作业。

GraphX的底层设计有以下几个关键点。

  • 对Graph视图的所有操作,最终都会转换成其关联的Table视图的RDD操作来完成。这样对一个图的计算,最终在逻辑上,等价于一系列RDD的转换过程。
  • 两种视图底层共用的物理数据,由RDD[Vertex-Partition]和RDD[EdgePartition]这两个RDD组成。
  • 图的分布式存储采用点分割模式,而且使用partitionBy方法,由用户指定不同的划分策略(PartitionStrategy)。

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/87803551