spark als算法 spark做什么计算_实时计算


Spark是一种分布式的计算框架,可以处理海量数据,目前流行的计算框架

  1. MapReduce:适用于离线批处理,也可以用于实时计算
  2. Storm: 用于实时计算
  3. Spark:即可以用于离线批处理,也可以用于实时计算
  4. Flink:主要用于实时计算

    综上,我们发现MapReduce计算框架是一种高度依赖于磁盘I/O框架,而且在有些业务场景下,比如某算法(梯度下降法,逻辑回归)会多次用到前写job的结果,导致重新计算及shuffle过程

    Spark计算框架是高度依赖于内存框架,而且支持将中间结果缓存,避免大量的重新计算,所以Spark框架也被称为内存计算框架

Spark生态架构

spark als算法 spark做什么计算_spark als算法_02


Spark框架设计目的:可以一栈式处理大数据所有的应用场景包括:

  1. 离线批处理
  2. 实时处理
  3. 交互式查询
  4. 算法建模

Spark使用模式

  1. Local:本地单机模式,一般用于测试或练习
  2. Standalone:Spark集群模式
  3. On Yarn:Spark的资源交给Yarn来管理

Spark最核心的数据结构

RDD(Resilient Distributed Datasets)

RDD:弹性分布式数据集,初学时,可以把RDD看做是一种集合类型(Array,List类比)

RDD的特点

  1. 有容错机制,即使数据丢失是可以恢复的
  2. 有分区机制,可以并行处理RDD数据

RDD的分区机制目的:

可以分布式的计算RDD的数据集,底层可以确保分区数据的负载均衡状态

spark als算法 spark做什么计算_实时计算_03

创建RDD的方式

  1. 将一个普通的集合类型(Array或List)转为RDD
  2. 通过Spark读取外部存储文件,将文件数据转变为RDD,可以从本地磁盘读取,也可以从HDFS读取

补充知识:

  1. sc是SparkContext的别名对象,用于操作Spark的入口对象,通过sc可以创建RDD,广播变量,此外sc用于负责job任务的分配和监控
  2. 创建RDD方法
    (1) sc.parallelize(普通类型集合,分区数量)
    (2) sc.makeRDD(普通类型集合,分区数量)
  3. 关于RDD分区相关的方法
    (1) rdd.partitions.size:查看分区数
    (2) rdd.glom.collect:查看分区数据
  4. 创建RDD的两种途径
  5. spark als算法 spark做什么计算_实时计算_04


RDD的函数操作

spark als算法 spark做什么计算_spark als算法_05


spark als算法 spark做什么计算_spark als算法_06


常用的RDD操作方法

spark als算法 spark做什么计算_实时计算_07


Spark的DAG概念

spark als算法 spark做什么计算_spark als算法_08


spark als算法 spark做什么计算_spark als算法_09


RDD之间的依赖关系

两种:

spark als算法 spark做什么计算_实时计算_10


Spark DAG 的Stage划分

spark als算法 spark做什么计算_离线_11