做Spark也有段时间了,主要是平台方面的东西源码也改过些。不过总觉得还是应用才是王道,加上现在AI日趋火爆,抽点时间学习下SparkML吧。—前言
我博客里SparkML系列的文章是基于Spark机器学习这本书(Nick Pentreath著),把每章重点和自己的一些感悟记录下。
Spark的环境搭建与运行
Spark支持4中运行模式
- 本地单机模式: 在本机的一个JVM里构造的一个多线程版本的Spark运行环境,用于开发测试。
- 集群单机模式: Spark StandAlone 稳定、搭建简单,但想同时使用Hadoop MR/hive等不太合适,适合小规模、特定领域的Spark集群。
- Spark on Mesos: 支持细粒度的资源调度,spark原生就支持的调动器,与docker支持好,适合云。
- Spark on Yarn: yarn是最有前途的资源调度器,能同时支持多种计算框架,与数据仓库容易结合,但目前不支持细粒度的资源调度。适合大数据平台。
Spark应用程序由两部分组成
- 驱动程序(Driver),有且只有一个,负责资源调度、DAG生成、计算任务调度等也可以进行一些运算。
- 执行程序(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 (都是代码,没必要贴了)