Spark原理——总体介绍

总体介绍

  • 编写小案例 (wordcount)

    @Test
    def wordCount(): Unit = {
      // 1. 创建 sc 对象
      val conf = new SparkConf().setMaster("local[6]").setAppName("wordCount_source")
      val sc = new SparkContext(conf)
      // 2. 创建数据集
      val textRDD = sc.parallelize(Seq("hadoop spark", "hadoop flume", "spark sqoop"))
      // 3.数据处理
      //    3.1、拆词
      val splitRDD = textRDD.flatMap(_.split(" "))
      //    3.2、赋予初始词频
      val tupleRDD = splitRDD.map((_, 1))
      //    3.3、聚合统计词频
      val reduceRDD = tupleRDD.reduceByKey(_ + _)
      //    3.4、将结果转换为字符串
      val strRDD = reduceRDD.map(item => s"${item._1},${item._2}")
      // 4.结果获取
      strRDD.collect().foreach(println(_))
      // 5.关闭 sc
      sc.stop()
    }
    // 一个_ 指代一个参数**
    

    在这里插入图片描述

  • 集群组成

    在 Spark 部分的底层执行逻辑开始之前,还是要先认识一下 Spark 的部署情况,根据部署情祝,从而理解如何调度

    在这里插入图片描述

    针对上图,首先可以看到整体上在集群中运行的角色有如下几个:

    • Master Daemon

      负责管理 Master 节点,协调资源的获取,以及连接 Worker 节点来运行 Executor ,是 Spark 集群中的协调节点

    • Worker Daemon

      Workers 也称之为叫 Slaves, 是 Spark 集群中的计算节点,用于和 Master 交互并管理 Executor.
      当一个 Spark Job 提交后,会创建 SparkContext, 后 Worker 会启动对应的 Executor,

    • Executor Backend

      上面有提到 Worker 用于控制 Executor 的启停,其实 Worker 是通过 Executor Backend 来进行控制的,Executor
      Backend 是一个进程是一个 JVM 实例持有一个 Executor 对象

  • 逻辑执行图

    在这里插入图片描述

    在这里插入图片描述

    对于上面代码中的 reduceRDD 如果使用 toDebugString 打印调试信息的话,会显式如下内容

    在这里插入图片描述

    根据这段内容,大致能得到这样的一张逻辑执行图

    在这里插入图片描述

    其实 RDD 并设有什么严格的逻辑执行图和物理执行图的概念,这里也只是借用这个概念,从而让整个RDD的原理可以解释,好理解

    对于 RDD 的逻辑执行图,起始于第一个入口 RDD 的创建,结束于 Actio 算子执行之前,主要的过程就是生成一组互相有依赖关系
    的 RDD,其并不会真的执行,只是表示 RDD 之间的关系,数据的流转过程

  • 物理执行图

    当触发 Action 执行的时候, 这一组互相依赖的 RDD 要被处理, 所以要转化为可运行的物理执行图, 调度到集群中执行.

    因为大部分 RDD 是不真正存放数据的, 只是数据从中流转, 所以, 不能直接在集群中运行 RDD, 要有一种 Pipeline 的思想, 需要将这组 RDD 转为 Stage 和 Task, 从而运行 Task, 优化整体执行速度.

    以上的逻辑执行图会生成如下的物理执行图, 这一切发生在 Action 操作被执行时.

    在这里插入图片描述

    从上图可以总结如下几个点

    在这里插入图片描述

    • 在第一个 Stage中, 每一个这样的执行流程是一个 Task, 也就是在同一个 Stage 中的所有 RDD 的对应分区, 在同一个 Task 中执行
    • Stage 的划分是由 Shuffle 操作来确定的, 有 Shuffle 的地方, Stage 断开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310871.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2023 - 探索】博0到博1,游戏新地图的探索日志

【2023 - 探索】博0到博1,游戏新地图的探索日志 写在最前面CSDN探索日志2023的探险 探索日志年终回顾探索 冒险回顾实习6月开始跟着老师做科研年中的一些其他事情9月开始上课开学后11月,读者互动 新年展望新年祝福 写在最前面 2023,我解锁了新…

C++ 之LeetCode刷题记录(八)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅,多学多练,尽力而为。 先易后难,先刷简单的。 35. 搜索插入位置 给定一个排序数组和一个目标值,…

Github

文章目录 Github 的作用基本概念创建仓库以及相关介绍创建文件、查看文件信息、编辑程序上传文件搜索文件下载/检出文件 Github 的作用 项目代码托管平台 基本概念 Repository 仓库,用于存放项目代码 *Star 收藏项目,方便下次查看(有一百个st…

SpringBoot内嵌Tomcat启动流程

前言 Spring MVC 让开发者不用了解 Servlet 细节,专注于 Controller 编写 API 接口。Spring Boot 更是采用约定大于配置的设计思想,通过内嵌 Tomcat 的方式让开发者可以快速构建并部署一个 Web 应用。怎么做到的呢? Tomcat启动方式 早期的…

Java 数据结构篇-实现 AVL 树的核心方法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 AVL 树的说明 2.0 AVL 树的成员变量及其构造方法 3.0 实现 AVL 树的核心方法 3.1 获取当前节点的高度 height(AVLNode node) 3.2 更新当前节点的高度 updateHeig…

软件安全测评需要关注哪些?湖南CMA、CNAS软件测试公司推荐

在当今信息化的社会,软件安全问题日益凸显,给个人和企业的数据安全造成了极大的威胁。为了保障软件的安全性,软件安全测评应运而生。 软件安全测评是通过对软件系统的评估,发现其中存在的安全漏洞和风险,为软件的开发…

大模型 RAG 问答技术架构及核心模块盘点:从 Embedding、prompt-embedding 到 Reranker

对于RAG而言,2023年已经出现了很多工作,草台班子有了一堆,架构也初步走通,2024年应该会围绕搜索增强做更多的优化工作。 因此我们今天来系统回顾下RAG中的模块,包括一些架构,文本嵌入embedding等&#xff…

MATLAB根据数据拟合曲线

MATLAB根据数据拟合曲线 MATLAB根据数据拟合曲线视频观看 MATLAB根据数据拟合曲线 x1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,6…

深入浅出Android dmabuf_dump工具

dmabuf是什么? 可以参考我之前写的一篇文章,在这篇文章中有介绍dma_buf:BufferManager_驱动的buffermanager-CSDN博客 dmabuf_dump工具介绍(基于Android 14) dmabuf_dump是一个可执行文件,接收参数调用libdmabufinfo.a的接口完成…

C#,入门教程(15)——类(class)的基础知识

上一篇: C#,入门教程(14)——字符串与其他数据类型的转换https://blog.csdn.net/beijinghorn/article/details/124004562 物以类聚,凡物必类。 类的使用,须遵循几个简单的原则: (1)能类则类&a…

宏集案例丨宏集PC Runtime软件助推食品行业生产线数字化革新

来源:宏集科技 工业物联网 宏集案例丨宏集PC Runtime软件助推食品行业生产线数字化革新 原文链接:https://mp.weixin.qq.com/s/DwzVzifUiidNr-FT3Zfzpg 欢迎关注虹科,为您提供最新资讯! 01 前言 近年来,中国食品行业…

想进入游戏开发领域,应该先学习C++编程还是C#编程?

想进入游戏开发领域,应该先学习C编程还是C#编程? 当你决心踏入游戏开发者的行列时,最先迎接你的将是引擎的选择。引擎是游戏的心脏,所有精彩的画面和内容都是脉脉游戏血液从引擎中流淌而出。Unity、Unreal Engine、Cocos等引擎盛…

牛客字符串

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

存储卷(数据卷)—主要是nfs方式挂载

1、定义 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,一旦容器被删除,数据会丢失。k8s基于控制器创建的pod,delete相当于重启,容器的状态会恢复到原始状态。一旦回到原始状态,后天编辑的文件…

二叉树的层序遍历(C++详解)

文章目录 写在前面解题思路具体做法 写在前面 本篇文章使用C实现了二叉树的层序遍历。在实现二叉树层序遍历时,一般情况下,大家可能直接输出遍历结果。然而,在解决在线评测(OJ)问题时,有时要求将每一层的遍…

这7个设计素材网站太好用了,特别是第一款!

网页设计师在使用网页设计素材时,会优先考虑那些免费优质的网页设计素材网站。找到一个免费优质的网页设计素材网站并不容易。有些网站要么需要开设材料网站的会员,要么设计素材质量差。即时设计整理总结了 7 个免费的网页设计素材网站,对 “…

GENMARK控制器维修SMALL SMC4092

晶圆转移机器人SMALL CONTROLLER控制器维修 SMC1100 半导体设备机械臂GENMARK控制器维修 eSensor特点: (1)基于DNA杂交和电化学检测原理; (2)电化学传感检测,并非荧光或光学检测。 电子信号的…

中国光伏展

中国光伏展是中国最大的光伏产业展览会,每年在国内举办一次。该展览会汇集了国内外光伏行业的领先企业和专业人士,展示最新的光伏技术、产品和解决方案。 中国光伏展旨在促进光伏行业的发展和创新,提升光伏产业的国际竞争力。展览会涵盖了光伏…

一、Sharding-JDBC系列01:整合SpringBoot实现分库分表,读写分离

目录 一、概述 二、案例演示-水平分表 (1)、创建springboot工程 (2)、创建数据库和数据表 (3)、application.yaml配置分片规则 (4)、测试数据插入、查询操作 4.1、插入-控制台SQL日志 4.2、查询-控制台SQL日志 三、案例演示-水平分库 (1)、创建数据库和数据表 (2…

React07-路由管理器react-router-dom(v6)

react-router 是一个流行的用于 React 应用程序路由的库。它使我们能够轻松定义应用程序的路由,并将它们映射到特定的组件,这样可以很容易地创建复杂的单页面应用,并管理应用程序的不同视图。 react-router 是基于 React 构建的,…