目录
  1. 1. Spark
    1. 1.1. 概念
      1. 1.1.1. MapReduce的缺点
      2. 1.1.2. Spark特点
      3. 1.1.3. Spark缺点
      4. 1.1.4. Spark核心
    2. 1.2. 体系架构
      1. 1.2.1. 主节点 cluster manager
      2. 1.2.2. 从节点 worker
      3. 1.2.3. 客户端 Driver Program
      4. 1.2.4. 单点故障
      5. 1.2.5. HA(高可用)
    3. 1.3. Spark任务提交流程
    4. 1.4. Spark算子(函数)
      1. 1.4.1. 1. RDD(类)
        1. 1.4.1.1. 创建 RDD
      2. 1.4.2. 2. RDD的算子
      3. 1.4.3. 3. RDD特性
      4. 1.4.4. 4. RDD缓存机制
      5. 1.4.5. 5. RDD容错机制
      6. 1.4.6. 6. RDD依赖关系
    5. 1.5. Spark数据倾斜
    6. 1.6. SparkSql
Spark相关

Spark

概念

替代MapReduce的计算模型

MapReduce的缺点

shuffle 的IO操作
(但在hadoop3.0 有极大的优化, 不再单纯的依赖IO基于内存)

Spark特点

快: 基于内存
易用性
通用型: 流式处理 spark sql
兼容性

Spark缺点

没有对内存进行管理,内存的管理交给应用程序(容易出现OOM)

Spark核心

SparkCore: 内核 相当于MapReduce
RDD: 弹性分布式数据集 由分区组成
SparkSQL: 相当于Hive 将sql/DSL 转化为spark任务 对RDD操作的任务 提交到Spark集群中运行处理
SparkStreaming: 相当于Storm 流式计算引擎,本质把连续的数据,把他转化成不连续的数据(DStream 离散流 本质RDD)

体系架构

https://spark.apache.org/docs/latest/cluster-overview.html
主从架构

主节点 cluster manager

职责 相当于YARN中的ResourceManager

  1. 管理调度集群的资源和任务
  2. 接受客户端的任务请求
  3. 部署方式: standalone(master节点), yarn, mesos

部署方式:
standalone(这种方式下称为master)
yarn
mesos

从节点 worker

任务执行者
从节点上资源和任务的管理者
Executor 线程形式

worker默认行为

  1. 占用该节点的所有资源(耗费内存的原因)

客户端 Driver Program

本质上通过创建一个sc对象来连接到Spark (sc = Spark Context)
启动的方式 spark-submit spark-shell

单点故障

HA(高可用)

  1. zookeeper
  2. 基于文件目录(本地测试可以这么玩)

Spark任务提交流程

类似于YARN

  1. 通过SparkContext提交任务请求(不是提交任务)
  2. ClientManager将任务信息及任务资源分配给Worker
  3. Worker 启动Executors线程
  4. 客户端的Driver Program 真正提交要执行的任务(jar文件)

Executor执行任务的时候按阶段(stage)执行:
一个spark会被拆分为多个阶段执行,在每个阶段会产生新的RDD,后一个RDD会依赖前一个RDD

Spark算子(函数)

1. RDD(类)

弹性分布式数据集
基本的数据抽象集合

创建 RDD

val rdd1 = sc.parallelize(Array(1,2,3,4,5));
通过外部数据创建
val rdd2 = sc.textFile(“hdfs://hadoop01:9000/input/data.txt”)

2. RDD的算子

transformation 不会触发计算 
map、filte、flatMap 
action 触发计算  
collect....

3. RDD特性

RDD缓存
RDD容错机制
RDD依赖关系

4. RDD缓存机制

主要为了提高效率
默认缓存在内存中(耗费内存的原因)

1
2
def cache(): this.type = persist()  
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

rdd.cache

5. RDD容错机制

checkpoint 检查点机制
由于RDD 存在依赖关系,可能造成血统(lineage)过长, 如果血统越长越容易出错
检查点类型:

  1. 本地目录
  2. HDFS目录
    rdd = sc.setCheckoutpointDir(“hdfs://xxxxxx”)
    rdd.checkoutpoint
    本质上是将rdd阶段性的结果保存在hdfs中

缺点:
性能问题:由于需要存储在HDFS中 所以需要进行IO操作所以会导致性能不高

6. RDD依赖关系

RDD 依赖关系 = 任务的stage 阶段
窄依赖: NarrowDependencies
(独生子女)
指每个父RDD的Partition(分区)最多被子RDD的一个Partition使用
宽依赖: WideDependencies
(超生)
指多个子RDD的一个Partition依赖同一个父RDD的Partition

Spark数据倾斜

数据在shuffle 过程中 分布不均匀导致部分节点计算量过大导致效率不高

  1. 从业务逻辑上解决
  2. 从技术方案上解决
  3. 从技术细节上解决

SparkSql

默认文件parquet文件 列式存储文件

文章作者: Fibonacci
文章链接: http://sovwcwsfm.com/blog/page/spark.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog