做Spark也有段时间了,主要是平台方面的东西源码也改过些。不过总觉得还是应用才是王道,加上现在AI日趋火爆,抽点时间学习下SparkML吧。—前言

我博客里SparkML系列的文章是基于Spark机器学习这本书(Nick Pentreath著),把每章重点和自己的一些感悟记录下。

Spark的环境搭建与运行

Spark支持4中运行模式

  1. 本地单机模式: 在本机的一个JVM里构造的一个多线程版本的Spark运行环境,用于开发测试。
  2. 集群单机模式: Spark StandAlone 稳定、搭建简单,但想同时使用Hadoop MR/hive等不太合适,适合小规模、特定领域的Spark集群。
  3. Spark on Mesos: 支持细粒度的资源调度,spark原生就支持的调动器,与docker支持好,适合云。
  4. Spark on Yarn: yarn是最有前途的资源调度器,能同时支持多种计算框架,与数据仓库容易结合,但目前不支持细粒度的资源调度。适合大数据平台。

Spark应用程序由两部分组成

  1. 驱动程序(Driver),有且只有一个,负责资源调度、DAG生成、计算任务调度等也可以进行一些运算。
  2. 执行程序(Executors),默认是2,可以是0,一般有多个。负责拉取数据进行计算、保存数据等等。

Spark编程模型

SparkContext和SparkConf类

SparkContext类是Spark应用程序的入口,也是Driver程序的核心模块。用来初始化各种配置、连接集群、控制Executor等。SparkContext对象创建时,需要SparkConf类作为参数,如果不用则使用默认配置。

spark-shell

spark支持scala/python版的REPL,分别是spark-shell和pyspark

RDD(弹性分布式数据集)

RDD是Spark最核心的概念,使用者可以暂时理解为分布式的数据。自带丰富的api,可以进行各种transformation和action计算。详情参阅其他文档

广播变量和累加器

这是Spark中最常用且功能强大的两种变量类型
广播变量 是只读的变量。由sparkcontext创建并发布到所有Executor,从而减少了Executor频繁读取同一份数据的开销。
累加器 非只读,且可以累加的变量。又可以分为本地累加器(Executor节点创建,只能访问自己节点的累加器)和全局累加器(由Driver创建,并且只允许Driver程序访问)。

Spark编程入门

pass (都是代码,没必要贴了)