IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据Spark系列之Spark深入原理解析 -> 正文阅读

[大数据]大数据Spark系列之Spark深入原理解析

1、spark的shuffle过程

  • 父RDD中同一分区中的数据按照算子要求重新进入子RDD的不同分区中;
  • 中间结果写入磁盘;
  • 由子RDD拉取数据,而不是由父RDD推送;
  • 默认情况下,shuffle不会改变分区数量。

2、spark的宽窄依赖

  • 窄依赖:一个父RDD的分区被子RDD的一个分区使用。1个子RDD的分区对应于1个父RDD的分区,比如map,filter,union等算子。
  • 宽依赖:一个父RDD的分区被子RDD的多个分区使用。宽依赖一般是对RDD进行groupByKey,reduceByKey,sortByKey等操作,就是对partition中的数据进行重分区(shuffle)。

3、spark中reduceByKey与groupByKey的区别

  • reduceByKey:按照key进行聚合,在shuffle之前有combine(预聚合)操作,返回结果是RDD[k,v];
  • groupByKey:按照key进行分组,直接进行shuffle;在实际开发过程中,reduceByKey比groupByKey性能好,更建议使用。

4、Spark提交作业的参数

  • executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个;
  • num-executors —— 启动executors的数量,默认为2;
  • executor-memory —— executor内存大小,默认1G;
  • driver-cores —— driver使用内核数,默认为1;
  • driver-memory —— driver内存大小,默认512M。

5、RDD的常见操作

(1)RDD支持两种操作:转化操作(Transformation算子)、行动操作(action算子)

  • Transformantion:Map, Filter, FlatMap, Sample, GroupByKey, ReduceByKey, Union, Join, Cogroup, MapValues, Sort, PartionBy
  • Action:Collect, Reduce, Lookup, Save (主要记住,结果不是 RDD 的就是 Action)

(2)区别

  • 转化操作:返回一个新的RDD的操作,不会触发作业提交,是延迟计算,如map(),filter()
  • 行动操作:向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际计算,如count(),first()

6、RDD的持久化方式

(1)持久化级别:

  • memory_only:只放在内存
  • memory_only_ser:在内存存放序列化后的数据(减少内存开销,但需反序列化,因此会加大CPU开销)
  • memory_and_disk:如果数据在内存中放不下,则溢写到磁盘上
  • memory_and_disk_ser:如果数据在内存中放不下,则溢写到磁盘上,在内存中存放序列化后的数据
  • disk_only:只放在磁盘
  • xxx_2:如果尾部加了2的持久化级别,表示会将持久化数据存为两份,保存到其他节点

(2)memory_only若存储不了:

  • 若缓存数据太多,内存放不下,spark会自动利用最近最少使用(LRU)的缓存策略把最老的分区从内存中移除;下一次要用到已经被移除的分区时,这些分区需要重新计算。

(3)memory_and_disk:

  • 被移除的分区都会写入磁盘,不必担心作业因为缓存太多数据被打断。

7、Spark作业提交的流程

① spark-submit 提交代码,执行 new SparkContext(),在 SparkContext 里构造 DAGScheduler 和 TaskScheduler。
② TaskScheduler 会通过后台的一个进程,连接 Master,向 Master 注册 Application。
③ Master 接收到 Application 请求后,会使用相应的资源调度算法,在 Worker 上为这个 Application 启动多个 Executer。
④ Executor 启动后,会自己反向注册到 TaskScheduler 中。所有 Executor 都注册到 Driver 上之后,SparkContext 结束初始化,接下来往下执行我们自己的代码。
⑤ 每执行到一个 Action,就会创建一个 Job。Job 会提交给 DAGScheduler。
⑥ DAGScheduler 会将 Job划分为多个 stage,然后每个 stage 创建一个 TaskSet。
⑦ TaskScheduler 会把每一个 TaskSet 里的 Task,提交到 Executor 上执行。

Executor 上有线程池,每接收到一个 Task,就用 TaskRunner 封装,然后从线程池里取出一个线程执行这个 task。(TaskRunner 将我们编写的代码,拷贝,反序列化,执行 Task,每个 Task 执行 RDD 里的一个 partition)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:36:07  更:2021-10-25 12:36:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:13:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码