Spark 初入门

1 简介

Spark是三大分布式计算系统开源项目之一(Hadoop,Spark,Storm)。

特点

  • 运行速度快:

    Spark使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;

  • 容易使用:
    Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;

  • 通用性:
    Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;

  • 运行模式多样:
    Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。

与Hadoop相比,Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少了IO开销,因而,Spark更适合于迭代运算比较多的数据挖掘与机器学习运算。

2.安装

Spark可以独立安装使用,也可以和Hadoop一起安装使用。和Hadoop一起安装使用,可以让Spark使用HDFS存取数据。

当安装好Spark以后,里面就自带了scala环境,不需要额外安装scala。

参考链接 anaconda 下spark 安装
暂时还是不懂这种安装方式和 使用 pip install pyspark 有什么区别。

3. 功能

3.1 基本概念

  • RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
  • DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系;
  • Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
  • 应用:用户编写的Spark应用程序;
  • 任务:运行在Executor上的工作单元;
  • 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作;
  • 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

在这里插入图片描述

3.2 RDD

RDD,Resilient distributed datasets,分布式收集数据结构,是Spark 计算引擎。

RDD只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的存储,大大降低了数据复制、磁盘IO和序列化开销。

每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上。

RDD的操作及数据运算,分为“行动”(Action)和“转换”(Transformation)两种类型,转换操作(比如map、filter、groupBy、join等)接受RDD并返回RDD,而行动操作(比如count、collect等)接受RDD但是返回非RDD(即输出一个值或结果)。

步骤:

  • RDD读入外部数据源(或者内存中的集合)进行创建;
  • RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用;
  • 最后一个RDD经“行动”操作进行处理,并输出到外部数据源(或者变成Scala集合或标量)。

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

  • 高容错性。
    RDD只读不能修改数值,如需修改数据则通过转换形成子RDD。
  • 中间结果持久化到内存。
    减少通讯开销。
  • 存放数据可以是Java对象。

分类

  • 窄连接
    包括map、filter、union。
  • 宽连接
    包含groupByKey、sortByKey等。

如果父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖,否则就是宽依赖。

1.1 MapReduce 算法

  • 矩阵向量相乘;
  • 指数迭代;
  • 随机梯度方法;
  • 随机SVD;
  • QR;

缺点:

  • 数据共享的局限性;
  • 不同步骤的产物在分布式文件系统;
  • 复制和磁盘内存存储导致慢;

在这里插入图片描述

3.Spark函数

在这里插入图片描述
在这里插入图片描述

4.Spark示例

在这里插入图片描述

在这里插入图片描述


参考:

  1. Stanford Spark class, slides.
  2. 子雨实验室 Spark简介
  3. Spark运行框架
  4. RDD运行原理
发布了510 篇原创文章 · 获赞 152 · 访问量 77万+

猜你喜欢

转载自blog.csdn.net/rosefun96/article/details/90956581