spark-core相关知识点

摘要

四个部分, 难度递增

  1. Spark基础
  2. RDD基础
  3. job的生成和提交
  4. 常用算子, 重点在于ActionTransformation算子的区分, 以及是否触发shuffle

概述

Spark特点
  1. 速度快. 以Hadoop的MapReduce为基准, Spark比MR快100倍
  2. 易用. 提供了Java, Scala, Python的API, Python和Shell的交互式界面, 80多种算子
  3. 通用. 批处理, 交互式查询, 实时流处理, 机器学习和图计算
  4. 兼容性. 可以在Hadoop上运行Spark, Spark也有自己的集群
Spark核心组件

SparkCore: 数据抽象RDD, 提供了StandAlone模式
SparkStream: 实时流处理
SparkMLlib: 机器学习库
SparkGraphX: 图计算

Spark和MR
  1. MR只有简单的map和reduce逻辑, Spark有80多种算子, 而且Spark支持流式处理, 机器学习和图计算. 功能更为强大
  2. MR处理复杂数据需要设计多个MR, 依次进行; Spark借助多job在内存中依次进行
  3. MR计算结果会持久化到磁盘, Spark在内存中保留缓存. Spark速度更快
  4. Spark借助RDD实现了高容错性, MR遇到错误只能重新计算
  5. MR逻辑简单, 稳定性强, 适合后台长期运行; Spark需要调优
Spark启动
  1. start-all, 先启动Master, Master找到slaves配置文件, 依次启动Worker
  2. Worker到Master进行注册
  3. Master将Worker信息保存到磁盘和内存, 返回注册成功的信息
  4. Worker开始给Master发送心跳包, Master持续更新心跳信息
启动细节
  1. Spark和Hadoop的sbin包中都有start-all.shstop-all.sh, 在添加到环境变量时需要注意
  2. Spark分布式默认需要1G以上的内存, 所以搭建环境时, 对应的yarn节点内存必须2G及以上

RDD

概述: 处理大数据的核心思路就是分割.
spark不仅切分了数据, 而且将数据处理的流程也进行了切分
全部分区数据的每部分计算以及计算结果, 就是一个RDD

特性
  1. 数据抽象. 不实际存储数据
  2. 分布式. 数据存储位置, 以及计算过程都在分布式系统中
  3. 不可变. RDD一旦生成, 数据和依赖关系就不可更改
  4. 容错. 借助依赖关系, RDD出错时只需要重新计算出错的那部分数据
  5. 弹性. 存储位置可内存可硬盘, 高容错等
弹性体现
  1. 自动进行内存和磁盘数据存储的切换
  2. 基于血统的高效容错机制
  3. Task如果失败, 会自动进行特定次数的重试
  4. Stage如果失败会自动进行特定次数的重试
  5. Checkpoint可以主动或被动触发
  6. 数据调度弹性
属性
  1. 分区信息(计算哪部分数据)
  2. 该分区的计算规则(怎么计算)
  3. 对其它RDD的依赖(此次计算在整个流程中处于什么位置)
  4. [可选]分区器, 默认是HashPartitioner, 也可以自定义
  5. [可选]优先位置列表. 决定task在哪个节点上运行

Job生成和提交逻辑

  1. Action算子触发Job的生成; 根据RDD的依赖关系构建DAG(有向无环图)
  2. 以宽依赖作为分割依据, DAG被进一步细分为多个Stage. 每个Stage根据分区数生成对应数量的Task
  3. TaskScheduler(调度器)根据先到先得(FIFO), 或公平调度原则, 根据资源情况将Task调度到Executor
  4. Worker开启Executor进程, Executor进程将Task分配给线程池
Job提交
  1. 客户端作为Driver, 先启动SparkSubmit进程, 开始和Master通信, 此时也生成了SparkContext对象,
  2. Master收到请求, 寻找空闲的Worker, 并分配相应资源
  3. Worker领取任务, 并启动Executor. Exextor启动后反向注册到Dirver
  4. DriverExecxtor提交具体的计算规则, Execxtor进行计算
  5. Executor将计算结果返回Worker

常用算子

算子分为Transformation算子和Action算子
一般而言, 方法返回值为RDD的属于Transformation算子

Action算子会触发Job的生成, Action算子对应的RDD也会被封装为finalStage.
除了Action算子之外, 触发shuffleTransformation算子也会产生Stage划分

Action算子
名称功能
reduce聚合为单元素
aggregate可以转换数据类型, 类似于combineByKey
count计数
first取首位元素
take取指定位元素
collect聚合为集合
foreach遍历
foreachPartition以分区为单位遍历
saveAsTextFile存储为text文件
Transformation算子

Transformation算子大致上可以分为两类,

  1. map相关, 是对数据的重新映射, 底层调用了new MapPartitionsRDD. 不触发shuffle
  2. reduce相关, 是对数据的聚合, 底层调用了combineByKeyWithClassTag. 会触发shuffle
  3. join相关的方法, 一般都是调用了cogroup, 进而调用了mapValues.
    总而言之, 重新映射的方法底层都是map. 但是像join类这样, 可以在参数中直接指定partitioner的, 都视为可以触发shuffle
触发shuffle

values聚合方法

名称功能
distinct
groudByKey唯一一个在分区内部不聚合的, 避免使用
reduceByKey无初始值, 聚合values
flotByKey指定初始值, 初始值必须和values类型保持一致
aggregateByKey可以分别指定分区聚合逻辑和整体聚合逻辑
combineByKey更为底层的聚合算子, 可以变换数据类型

连接查询

名称功能
leftOuterJoin左外连接
rightOuterJoin右外连接
join内连接
cogroup全外连接
intersection求交集, 去重
repartition重新分区, 默认开启shuffle
coalesce分区多变少可以不shuffer
subtract移除一个RDD中的内容

其它

名称功能
sortByKeynew ShuffledRDD
sortBykeyBy + sortByKey + values
不触发shuffle

map相关方法

名称功能
map映射, 转换数据集
mapPartition以分区为单位的map, 速度快但是耗费内存
mapPartitionWhitIndex自带分区信息
flatMap映射(map)并压平flatten
mapValues只映射转换values
keyBy指定键
filter过滤

其它

名称底层
unionnew UnionRDD
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark历史 4 4 BDAS生态系统 4 5 Spark与Hadoop的差异 5 6 Spark的适用场景 6 7 Spark成功案例 6 第二章 Spark开发环境搭建 8 1 Spark运行模式 8 2 Spark环境搭建 8 2.1Scala的安装 8 2.2Spark的单节点配置 9 2.3Spark-Standalone集群配置 9 2.4Spark-on-Yarn模式配置 12 2.5Spark-on-Mesos模式配置 13 2.6Hive-on-Spark配置 13 第三章 Spark计算模型 15 1 RDD编程 15 1.1弹性分布式数据集RDD 15 1.2构建RDD对象 15 2RDD操作 15 2.1将函数传递给Spark 16 2.2了解闭包 16 2.3Pair RDD模型 17 2.4Spark常见转换操作 18 2.5Spark常见行动操作 20 2.6RDD持久化操作 21 2.7注意事项 23 2.7并行度调优 24 2.8分区方式 25 3Examle:PageRank 27 第四章 Spark编程进阶 29 1共享变量 29 1.1累加器 30 1.2广播变量 31 2基于分区进行操作 32 3与外部程序间的管道 33 4数值RDD的操作 34 5 Spark Shuffle机制 34 第五章 Spark调优与调试 39 1开发调优: 40 1.1调优概述 40 1.2原则一:避免创建重复的RDD 40 1.3原则二:尽可能复用同一个RDD 41 1.4原则三:对多次使用的RDD进行持久化 42 1.5原则四:尽量避免使用shuffle类算子 43 1.6原则五:使用map-side预聚合的shuffle操作 44 1.7原则六:使用高性能的算子 45 1.8原则七:广播大变量 46 1.9原则八:使用Kryo优化序列化性能 47 1.10原则九:优化数据结构 48 2资源调优 48 2.1调优概述 48 2.2 Spark作业基本运行原理 49 2.3资源参数调优 50 第六章 Spark架构和工作机制 52 1 Spark架构 52 1.1 Spark架构组件简介 52 1.2 Spark架构图 54 2 Spark工作机制 54 2.1 Spark作业基本概念 54 2.2 Spark程序与作业概念映射 55 2.3 Spark作业运行流程 55 3 Spark工作原理 55 3.1 作业调度简介 55 3.2 Application调度 56 3.3 Job调度 56 3.4 Tasks延时调度 56 第七章 Spark运行原理 57 1 Spark运行基本流程 57 2 Spark在不同集群中的运行架构 58 2.1 Spark on Standalone运行过程 59 2.2 Spark on YARN运行过程 60
Spark CoreSpark的基础组件,提供了分布式任务调度、内存管理、错误恢复、存储管理等核心功能。以下是Spark Core的一些知识点概述: 1. RDD:弹性分布式数据集,是Spark中最基本的数据处理模型,可以看作是一个不可变的分布式数据集合,支持并行操作。 2. 累加器:用于在并行计算中对某个变量进行累加操作,可以在Driver端定义,但在Executor端进行累加操作。 3. 广播变量:用于在并行计算中对某个只读变量进行广播,以便在每个节点上使用相同的值,避免重复传输。 4. 分区:RDD中数据的分片,每个分区都会被一个Task处理,分区数可以手动指定。 5. 依赖关系:RDD之间的依赖关系分为窄依赖和宽依赖,窄依赖表示每个父RDD的分区最多只被一个子RDD的分区使用,宽依赖表示每个父RDD的分区可能被多个子RDD的分区使用。 6. SparkContext:Spark应用程序的入口,用于创建RDD、累加器、广播变量等。 7. 部署模式:Spark支持本地模式、Standalone模式、Yarn模式、Mesos模式等多种部署模式。 8. 数据读取:Spark支持从本地文件系统、HDFS、HBase、JDBC等多种数据源读取数据。 以下是一个例子,演示如何使用Spark Core读取本地文件并进行Word Count操作: ```python from pyspark import SparkContext # 创建SparkContext sc = SparkContext("local", "Word Count") # 读取文件并进行Word Count lines = sc.textFile("file:///path/to/file") words = lines.flatMap(lambda line: line.split(" ")) wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b) # 输出结果 for wc in wordCounts.collect(): print(wc) # 关闭SparkContext sc.stop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值