Spark

  • 列举Spark的特点
  • 描绘Spark Stack的层次图
  • 说明Spark Stack各组件的功能
  • 描述Spark如何使用RDD抽象概念进行内存处理
  • 说明Spark结构的内部工作
  • 总结Spark如何管理和执行集群上的代码

Spark支持丰富的编程模型,支持在内存处理和存储数据,支持批处理和流处理、支持使用python、java、scala、SQL调用库完成数据分析工作。 
Spark由下图五个部分组成。Spark有一个核心计算引擎,复制在集群中的节点上分发和监视任务,也负责分布式调度、内存管理和容错。底层的任何改进,都将对上层有很大提升。 
Spark 
Spark Core支持与Yarn、Mesos以及各种NoSql存储系统如Hbase进行交互。Spark Core中很重要的一部分就是定义弹性分布式数据集(RDD,resilient Distributed Dataset)。RDD是Spark中的抽象概念,它能并行地在许多计算节点之间搬运和转化数据。 
Spark Sql是Spark中提供结构化和非结构化数据共同查询的的组件,它支持多种数据源,并可以使用python、java、scala通过API将查询结果转化成RDD。 
Spark Streaming 支持流数据操作,Spark Streaming虽然不是原生的实时流数据处理接口,但是它支持来自流式数据系统的微数据集(也称micro-batches),这些微数据集可以被转化成RDB。 
MLlib是Spark中的机器学习算法和模型评估的库。所有这些功能都被移植到库中,供Java等Spark支持的语言调用。 
GraphX是Spark的图分析库,支持把图的顶点和边数据模型转化为RDD,提供图算法的可伸缩实现。

MapReduce中Map过程产生的中间数据被存回HDFS,硬盘操作通常是比较费时的,尤其当数据量很大的时候。而Spark将Map产生的中间数据以RDD的形式分散存储在集群的内存中。 
Spark从HDFS、Hbase、JSON、文本、本地目录等数据源中读取数据,并为它们创建RDD。Spark能将一种RDD转化成另一种RDD。需要强调的是RDD是不可变的,即RDD是不可拆分的,但RDD可以经过一次或多次转化被创建。Spark会追踪每个文件分片的历史,当某一个文件分片损坏或丢失时,Spark会根据该文件分片所需的文件重新计算、创建该分片。 
SparkSpark 
鸟瞰Spark,它有一个驱动程序和许多工人节点。驱动程序是程序的起点,它把RDD分发到集群并保证RDD的转化和动作的执行。Spark中的工人节点有一个java虚拟机,是Spark程序的执行者。 
Spark 
Cluster Manager自动预备和重启这些节点,它目前支持三种集群管理的接口:Spark Standalone、Apache Mesos和Hadoop Yarn。 
Spark
驱动程序和集群管理者交互以对资源进行监控和预备,也会直接和工人节点交互以提交和执行任务。在执行器中运行时,RDD被创建或在转化时被传递。 
Spark