前言
为什么要学习Spark?
1. Spark比MapReduce快
- spark可以将数据缓存在内存中进行计算 (cache)
- spark是粗粒度资源调度,MR是细粒度资源调度
- DAG有向无环图 (spark两个shuffle中间结果不需要落地,MR需要数据落地)
2. Spark简单
1. Spark core
- spark比MR快的三个原因
- RDD五大特性:
- RDD由一组分区组成,默认一个block对应一个分区
- 算子实际上是作用在每一个分区上的,每一个分区都会由一个task处理
- RDD之间有一系列的依赖关系,宽依赖和窄依赖,宽窄依赖用于切分stage, stage是一组可以并行计算的task
- 分区类的算子只能作用在KV格式的RDD上,
reducebyKey、groupBykey、sortBykey
- spark为task的执行提供了最佳计算位置,移动计算而不是移动数据
- 常用算子
- map mapPartition mapValues
- flatMap
- filter
- union
- join
- sample
- reduceBykey 会在map端进行预聚合
- groupBykey groupBy
- sortBykey sortBy
- foreach foreachPartition
- take
- collect
- save
- 环境搭建
- local(一般用于测试)
- 独立集群
- yarn
- yarn-client
- Driver在本地(执行spark-submit的服务器)启动
- 如果在本地提交了大量的任务,会导致本地网卡流量剧增
- yarn-cluster
- driver在随机一台nodemanger中启动
- 在本地看不到详细执行日志,一班用于上线使用
- 有一个高可用模式,如果driver挂了,会自动重启一个
5. 任务调度和资源调度
6. 缓存
- 对同一个rdd多次使用的时候可以将rdd缓存起来
- 缓存级别(常用两个)
- MEMORY_ONLY
- MEMORY_AND_DISK_SER
- checkpoint: 将rdd的数据缓存到hdfs中, 会切断rdd的依赖关系
- 广播变量
- 当在算子内使用了算子外的一个变量的时候可以将这个变量广播出去
- 如果不使用广播变量每一个task中会有一个变量副本
- 如果使用广播变量是每一个executor中一个变量副本
- 累加器
- 在算子内不能修改算子外的一个普通变量
- 累加器是在Executor端进行累加,在Driver端读取累加结果
2. Spark sql
3. Spark streaming
详情点击该篇博文:spark streaming概述及原理