【图解大数据技术】Spark

news/2024/9/14 2:02:56/ 标签: 大数据, spark, 分布式, big data

【图解大数据技术】Spark

  • Spark简介
  • RDD
  • Spark示例
  • Spark运行原理
    • 整体流程
    • DAG 与 stage
  • 为什么Spark比MapReduce快?

Spark简介

Spark与MapReduce一样,也是大数据计算框架。Spark相比MapReduce拥有更快的执行速度和更低的编程复杂度。

Spark包括以下几个模块:

在这里插入图片描述

  • Spark Core:封装了Spark的基本功能,比如RDD、任务调度等。
  • Spark SQL:Spark SQL可以处理结构化数据,当我们遇到结构化数据的计算时,可以使用Spark SQL,它允许我们把数据集映射为表结构,然后像操作关系型数据库的库表一样操作Spark SQL的表。
  • Spark Streaming:Spark Streaming可以做流式的准实时计算,比如可以监听kafka的消息做实时计算。
  • MLib:提供了机器学习的程序库。
  • GraphX:用于图计算的API。

在这里插入图片描述
Spark支持以下几种部署模式:

  • Standalone
  • Yarn
  • Mesos
  • Kubernetes

Spark是支持使用Yarn做资源调度的,因此Spark是可以替代掉MapReduce的。

而Mesos和Yarn一样,也是一个分布式资源管理器。

RDD

RDD(Resilient Distributed Dataset)的意思是弹性分布式数据集,本质上就是数据集,是Spark中最基本的数据抽象。

RDD是对不同存储节点的分片数据组成的数据集的抽象,RDD中每个Partition都指向存储集群中某个节点上的一个数据分片,当然我们也可以手动指定RDD的分区数。

在这里插入图片描述

Spark的计算就是对RDD的计算,Spark的计算是基于RDD进行的,一个RDD经过若干转换操作函数,转换操作本身返回的也是RDD,直到遇到action操作,则生成数据结果集返回。

在这里插入图片描述

RDD的转换操作和action操作包括以下这些:

在这里插入图片描述

Spark示例

Spark的wordcount示例:

val textFile = sc.textFile("hdfs://...") // 从hdfs中读取数据生成一个RDD
val counts = textFile.flatMap(line => line.split(" ")) // 按行切分.map(word => (word, 1)) // 每个单词映射为1.reduceByKey(_ + _) // 计算每个单词个数
counts.saveAsTextFile("hdfs://...") // 结果写回HDFS

在这里插入图片描述

Spark运行原理

整体流程

Spark 支持 Standalone、Yarn、Mesos、Kubernetes 等多种部署方案,下面的运行流程不针对任何一种运行方案,不同运行方案可能角色名称不同,但是大体流程是相似的。

在这里插入图片描述

  1. Spark应用程序在JVM进程中启动,这个进程就是Driver进程。
  2. Driver进程启动后,调用SparkContext进行初始化,SparkContext启动DAGScheduler构建DAG(有向无环图)。
  3. DAGScheduler将DAG切分成一个一个的stage(阶段)。
  4. Driver向ClusterManager注册并申请资源。
  5. ClusterManager把Driver的主机地址等信息通知给计算节点(上图的Worker Node)。
  6. 计算节点收到ClusterManager的通知后,向Driver注册并申报自己可领取的任务数。
  7. SparkContext调用TaskScheduler给计算节点分配任务。
  8. 所有任务执行完毕后,Driver向ClusterManager发起注销。

DAG 与 stage

DAG是有向无环图,我们的代码会被Spark解析成DAG,DAG上的节点代表的就是RDD,边代表的就是RDD的操作。

比如以下程序:

val textFile = sc.textFile("hdfs://...") // 从hdfs中读取数据生成一个RDD
val counts = textFile.flatMap(line => line.split(" ")) // 按行切分.map(word => (word, 1)) // 每个单词映射为1.reduceByKey(_ + _) // 计算每个单词个数
counts.saveAsTextFile("hdfs://...") // 结果写回HDFS

会被解析成如下DAG

在这里插入图片描述

上图中,父RDD的一个Partition只会被子RDD的一个Partition依赖的这种情况叫窄依赖,而父RDD的一个Partition会被子RDD的多个Partition依赖的这种情况叫宽依赖。

在这里插入图片描述

宽依赖是存在shuffle的,Spark会根据宽依赖划分stage。

在这里插入图片描述

涉及到宽依赖的操作主要有:groupByKey、partitionBy、reduceByKey、join。

在这里插入图片描述

为什么Spark比MapReduce快?

Spark尽量使用内存来保存中间结果;而MapReduce则默认使用磁盘保存中间结果,这是Spark比MapReduce快的其中一个原因。

在这里插入图片描述

另外一个原因是在处理迭代式计算的时候,MapReduce要通过多个MapReduce程序进行处理,每个MapReduce都经过Map-Shuffle-Reduce的处理,然后上一个Reduce输出的结果作为下一个Map的输入,这种处理方式效率不高。

在这里插入图片描述

而Spark使用DAG 执行引擎,能够构建复杂的多阶段任务流程,并优化执行计划。这样可以在任务之间重用数据,减少不必要的读写操作,相比MapReduce的线性Map-Shuffle-Reduce流程,DAG能更灵活地管理计算任务,减少磁盘I/O次数,尽管shuffle次数本身并不能减少。


http://www.ppmy.cn/news/1475794.html

相关文章

AI算法17-贝叶斯岭回归算法Bayesian Ridge Regression | BRR

贝叶斯岭回归算法简介 贝叶斯岭回归(Bayesian Ridge Regression)是一种回归分析方法,它结合了岭回归(Ridge Regression)的正则化特性和贝叶斯统计的推断能力。这种方法在处理具有大量特征的数据集时特别有用&#xff…

搜索引擎中的相关性模型

一、什么是相关性模型? 相关性模型主要关注的是query和doc的相关性。例如给定query,和1000个doc,找到哪个doc是好query最相关的。 二、为什么需要相关性模型? 熟悉es的应该都熟悉BM25相关性算法。它是一个很简单的相关性算法。我…

Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制

章节内容 上节我们完成了: ZooKeeper 集群配置ZooKeeper 集群启动ZooKeeper 集群状况查看Follower 和 Leader 节点 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭…

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网:https://goharbor.io/ 点击 Download now 链接,会自动跳转到上述github页面&am…

多旋翼+VR眼镜:10寸FPV穿越机技术详解

FPV(First Person View)穿越机,是指通过第一人称视角来驾驶的无人机,特别强调速度和灵活性,常常用于竞赛、航拍和探索等领域。结合多旋翼设计和VR眼镜,FPV穿越机为用户提供了身临其境的飞行体验。 多旋翼技…

Android人脸解锁源码解析

1 人脸解锁相关类介绍 FaceManager FaceManager是一个私有接口,用于维护FaceService的之间连接。Keyguard通过该接口访问具有自定义界面的人脸识别身份验证硬件。应用无权访问FaceManager,必须改为使用BiometricPrompt。 FaceService 该框架实现用于管…

vscode连接到WSL子系统报错/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: not found

子系统单独启动没有问题,vscode启动wsl子系统报错 报错如下: /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/bin/code-server: 12: /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: n…

git github gitee 三者关系

Git: Git 是一个分布式版本控制系统,用于跟踪源代码的更改。它由 Linus Torvalds 于 2005 年开发,目的是更好地管理 Linux 内核开发。Git 是一个命令行工具,具有以下特点: 分布式:每个开发者的工作目录都是…

B树:深入解析与实战应用

在数据结构和算法的世界中,B树(B-tree)无疑是一颗璀璨的明星。它不仅广泛应用于数据库和文件系统的索引结构中,而且在许多需要高效数据检索的场景中发挥着重要作用。本文将从B树的基本概念入手,通过图文结合的方式&…

海外媒体宣发:尼日利亚媒体通稿报道发布-大舍传媒

尼日利亚媒体概述 尼日利亚,作为非洲人口最多的国家,拥有多元化的媒体环境。在这个国家,你可以找到各种类型的媒体,包括传统媒体和新媒体。传统媒体主要包括报纸、电视和广播,而新媒体则主要是互联网和社交媒体。 尼…

Java+springboot+vue智慧班牌小程序源码,智慧班牌系统可以提供哪些服务?

智慧班牌全套源码,系统技术架构:Javaspringbootvue element-ui小程序电子班牌:Java Android演示正版授权。 智慧班牌在智慧校园的数字化建设中提供了多种服务,这些服务不仅丰富了校园的信息展示方式,还促进了家校互动…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接 我当时快速看了一遍&#x…

ASP.NET MVC-制作可排序的表格组件-PagedList版

环境: win10 参考: 学习ASP.NET MVC(十一)——分页 - DotNet菜园 - 博客园 https://www.cnblogs.com/chillsrc/p/6554697.html ASP.NET MVCEF框架实现分页_ef 异步分页-CSDN博客 https://blog.csdn.net/qq_40052237/article/details/106599528 本文略去…

ATE电源芯片测试方案之效率曲线评估芯片性能

在电子产品的设计中,电源管理芯片的效率优化是提升能效和延长使用寿命的关键。因此,探究电源管理芯片在不同工作条件下的效率变化,并通过效率曲线进行可视化表达,对于电源管理技术的进步至关重要。 电源管理芯片的效率曲线 鉴于电…

【C++深入学习】类和对象(一)

欢迎来到HarperLee的学习笔记! 博主主页传送门:HarperLee博客主页! 欢迎各位大佬交流学习! 本篇本章正式进入C的类和对象部分,本部分知识分为三小节。复习: 结构体复习–内存对齐编译和链接函数栈桢的创建…

OpenCV solvePnP位姿估计

目录 一、概述 二、实现代码 2.1solvePnP函数 2.1.1输入参数 2.1.2输出参数 2.2完整代码 三、实现效果 3.1标定板位姿 3.2标定板到相机的变换矩阵 一、概述 完成相机标定后,可以通过检测标定板在图像中的位置来计算标定板在相机坐标系下的位姿(…

vue 项目代码架构

Vue项目的代码架构通常遵循一定的组织结构和约定,以提高项目的可维护性、可扩展性和可读性。以下是对Vue项目代码架构的详细解析: 一、项目目录结构 Vue项目的目录结构通常包括以下几个关键部分: 根目录: package.json&#x…

如何使用这个XMLHttpRequest?

ajax含义:async javascript and XML;是异步的JS和XML;是实现页面局部刷新的技术(是一门独立的技术)。 为什么在js内能够使用呢?是因为ajax在浏览器内内置了一个核心对象,--》XMLHttpRequest(低版本的IE浏览器没有) 步…

Jetson-AGX-Orin gstreamer+rtmp+http-flv 推拉流

Jetson-AGX-Orin gstreamerrtmphttp-flv 推拉流 Orin是ubuntu20.04 ARM64架构的系统,自带gstreamer 1、 测试摄像头 测试摄像头可以用v4l2-ctl命令或者用gst-launch-1.0 #用v4l2-ctl测试摄像头,有尖角符号持续打印则正常 v4l2-ctl -d /dev/video0 --set-fmt-vid…

MySQL篇:事务

1.四大特性 首先,事务的四大特性:ACID(原子性,一致性,隔离性,持久性) 在InnoDB引擎中,是怎么来保证这四个特性的呢? 持久性是通过 redo log (重做日志&…