spark基础

1. Spark概述

1.1Spark是什么

Spark是内存计算系统,2009年它出品于UCBerkeley AMPLab伯克利下属实验室,它最早是一片博士论文,论述如何提高map和reduce的效率。后来就针对这篇论文写出了相应的实现。2013年6月捐赠了给Apache,2014年2月成为Apache的顶级项目。
最大节点的集群来自腾讯,8000个节点,单个job最大分别是阿里巴巴和Databricks,处理到1PB的数据。宣传其MapReduce方式比Hadoop方式快,快10到100倍。

1.2产生背景

  • MapReduce框架局限性
    • 仅支持Map和Reduce两种操作
    • 处理效率低效
      • Map中间结果写磁盘,Reduce写HDFS,多个MR间通过HDFS交换数据;
      • 任务调度和启动开销大;
      • 无法充分利用内存
      • Map端和Reduce端均需要排序
    • 不适合迭代计算(机器学习、图计算),交互式处理(数据挖掘)
  • MapReduce编程不够灵活
    • 尝试scala函数式编程语言
  • 现有框架多样化,不统一
    • 批处理:MapReduce、Hive、Pig
    • 流式计算:Storm
    • 交互式计算:Impala

1.3有什么特点

  • 高效(比MapReduce快10~100倍)
    • 内存计算引擎,提供Cache机制来支持需要反复迭代计算或者多次数据共享,减少数据读取的IO开销
    • DAG引擎,减少多次计算之间中间结果写到HDFS的开销
    • 使用多线程池模型开减少task启动开销,shuffle过程中避免不必要的sort操作以及减少磁盘IO操作
  • 易用
    • 提供了丰富的API ,支持Java,Scala,Python和R四种语言
  • 与Hadoop集成
    • 读写HDFS/Hbase
    • 与YARN集成

2. Spark核心

2.1核心概念

Resilient Distributed DataSet,弹性分布式数据集,是一个分布式内存的一个抽象概念,RDD是spark的灵魂。RDD提供了一个可以让用户显示地将数据存储到磁盘和内存中,并能控制数据的分区,RDD内部有许多分区,每个分区有大量的数据。有以下特点:

  • 分布在集群中的只读对象集合(由多个Partition构成)
  • 可以存储在磁盘或内存中
  • 通过并行transformation操作构造
  • 失效后自动重建

2.1RDD的创建方式

  • 调用SparkContext的parallelizing 方法,在Driver中一个已经存在的集合上创建
  • 读取一个外部数据集

2.2RDD的基本操作

  • Transformation
    转换操作是接收RDD并返回RDD
  • Action
    行动操作是接收RDD返回非RDD的一个结果或一个值

2.3RDD的操作流程


  1. 创建SparkContext对象
  2. 创建RDD
    Spark读取外部数据源或从父RDD中创建,形成RDD
  3. RDD进行一系列的transformation或action的操作

RDD采用了惰性调用,即在RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于“转换”Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算。

3.Spark生态

spark基础_第1张图片

Spark Core:实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简 称 RDD)的 API 定义。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是 Spark 主要的编程抽象。
Spark SQL:是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。
Spark Streaming:是 Spark 提供的对实时数据进行流式计算的组件,其核心思路是将流式计算分解成一系列短小的批处理作业。
Mllib:提供 了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯 度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。
GraphX:是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。 与 Spark Streaming 和 Spark SQL 类似,GraphX 也扩展了 Spark 的 RDD API,能用来创建 一个顶点和边都包含任意属性的有向图。

4. Spark运行模式

从上图中可以看到spark可以本地运行,也可以独立运行,还可以运行在管理工具上

  • 本地运行
    单机运行,通常用于测试
  • 独立运行
    独立运行在一个集群中
  • 管理工具
    运行在资源管理系统上,比如YARN,或者mesos

你可能感兴趣的:(spark,spark)