从了解到掌握 Spark 计算框架(一)Spark 简介与基础概念
文章目录
- 什么是 Spark?
- 核心特点
- Spark 对比 MapReduce
- Spark 编程模型
- RDD
- DataFrame
- Dataset
- Spark 运行模式
- Spark 生态
什么是 Spark?
Spark 是一个基于内存的分布式计算框架,最初由加州大学伯克利分校的 AMPLab 开发,后来捐赠给了 Apache 软件基金会。它提供了一个高效、通用、可扩展且易用的大数据处理平台,支持各种类型的应用,包括批处理、实时流处理、机器学习和图处理等。
核心特点
-
快:Spark 使用内存计算来加速数据处理。相比于传统的基于磁盘的数据处理框架(如:MapReduce),Spark 将数据存储在内存中,可以显著减少数据读写的开销,从而加快计算速度。
-
分布式:Spark 可以在多个节点上并行运行,通过将任务分配给集群中的多个计算节点来实现横向扩展,实现任务的并行处理,加速数据处理的速度。它还支持在内存中缓存数据,以加速迭代算法和交互式查询。
-
全面:Spark 提供了统一的编程模型,可以用于批处理、交互式查询、流处理和机器学习等各种类型的任务。这种通用性让开发人员可以在同一个框架下处理各种不同类型的数据处理需求。
-
易用:Spark 提供了丰富的高级API(如 RDD、DataFrame 和 Dataset),以及支持多种编程语言(如 Scala、Java、Python)。
-
生态系统丰富:Spark 生态系统丰富多样,如 Spark SQL(用于结构化数据处理)、Spark Streaming(用于实时数据处理)、MLlib(用于机器学习)、GraphX(用于图处理)等,以及与其他大数据技术的集成,如Hadoop、Hive、Kafka 等。
Spark 对比 MapReduce
处理速度
-
Spark 使用内存计算和基于 DAG(Directed Acyclic Graph)的执行计划,在处理迭代算法和交互式查询时通常比 MapReduce 快数倍。
-
MapReduce 是基于磁盘读写的模型,在每次任务完成后需要将中间结果写入磁盘,因此速度相对较慢,适用于批处理任务。
编程模型
-
Spark 提供了丰富的高级 API,如 RDD、DataFrame 和 Dataset,以及支持多种编程语言,编程模型更灵活,易于使用和学习。
-
MapReduce 的编程模型相对简单,主要是 Map 和 Reduce 两个阶段,需要手动处理数据的分割和中间结果的写入。
计算方式
-
Spark 支持内存计算,将数据存储在内存中进行处理,以加速数据处理和计算,适用于迭代算法和实时数据处理。
-
MapReduce 主要是基于磁盘的计算模型,每次任务都会将中间结果写入磁盘,造成了额外的 IO 开销。
容错性
-
Spark 使用 RDD 的血统来记录每个 RDD 的来源和依赖关系,在数据丢失或计算节点失败时可以重新计算丢失的数据分区,保证计算结果的正确性。
-
MapReduce 也具有容错性,但是在任务失败时需要重新启动整个任务,造成了额外的开销和时间延迟。
Spark 相对于 MapReduce 具有更快的处理速度、更灵活的编程模型、支持内存计算和更好的容错性等优势,适用于迭代算法、实时数据处理等场景,而 MapReduce 则更适用于传统的批处理任务。
Spark 编程模型
Spark 的编程模型是指开发者用来编写 Spark 应用程序的抽象接口和概念,共有三种核心的编程模型,包括 RDD、DataFrame 和 Dataset。
RDD
-
RDD 称为弹性分布式数据集,是 Spark 最早引入的数据抽象概念,代表着分布式的只读数据集合。
-
RDD 是一个分区的、不可变的、可并行计算的数据集,可以从外部数据源创建,也可以通过在其他 RDD 上进行转换操作生成。
-
RDD 提供了一系列的转换操作(如
map、filter、reduceByKey等)和行动操作(如collect、count、saveAsTextFile等),可以进行数据的转换和计算。 -
RDD 具有容错性,如果某个分区的数据丢失或出错,Spark 可以根据 RDD 的血统重新计算丢失的数据分区,保证计算结果的正确性。
DataFrame
-
DataFrame 是一个分布式的、带有命名列的数据集,类似于关系型数据库中的表。
-
DataFrame 提供了结构化的数据处理功能,支持类似 SQL 的查询操作和列操作,如
select、filter、groupBy等。 -
DataFrame 是基于 RDD 构建的,但是相比于 RDD,DataFrame 提供了更高层次的抽象,更适合于处理结构化数据。
-
DataFrame 可以从多种数据源创建,如文本文件、JSON 文件、Parquet 文件、数据库表等。
Dataset
-
Dataset 是 Spark 2.0 引入的新的抽象概念,结合了 RDD 和 DataFrame 的特点,提供了类型安全的分布式数据集。
-
Dataset 可以包含任意类型的数据,但是在运行时会将其转换为 JVM 的对象类型。
-
Dataset 提供了强类型的 API,可以在编译时进行类型检查,避免了在运行时出现类型错误。
-
Dataset 通常用于需要更严格的类型控制和性能优化的场景,如机器学习等。
Spark 运行模式
Spark 可以在多种不同的运行模式下进行部署和执行,包括以下几种常见的模式:
本地模式(local)
-
在本地模式下,Spark 只在单个 JVM 进程中运行,不需要启动集群,适用于开发和测试环境。
-
本地模式通常用于在开发阶段快速验证代码逻辑和功能。
独立部署模式(Standalone)
-
在独立部署模式下,Spark 使用自己的集群管理器启动和管理 Spark 应用程序,无需依赖于其他的集群管理系统。
-
独立部署模式适用于对资源管理有一定需求,但规模不太大的环境。
YARN 模式
-
在 YARN 模式下,Spark 作为 YARN 的一个应用程序运行在 Hadoop 集群上,由 YARN 负责资源管理和作业调度。
-
YARN 模式是最常见的 Spark 部署模式之一,可以与 Hadoop 生态系统无缝集成,充分利用 Hadoop 集群的资源。
Mesos 模式
-
在 Mesos 模式下,Spark 作为 Mesos 的一个框架运行在 Mesos 集群上,由 Mesos 负责资源管理和作业调度。
-
Mesos 模式也是一种常见的 Spark 部署模式,适用于需要动态资源分配和调度的环境。
Kubernetes 模式
-
在 Kubernetes 模式下,Spark 作为一个 Kubernetes 的应用程序运行在 Kubernetes 集群上,由 Kubernetes 负责资源管理和作业调度。
-
Kubernetes 模式是一种新兴的 Spark 部署模式,具有弹性、可伸缩的特点,适用于容器化的环境和微服务架构。
Spark 生态
-
Spark Core:Spark Core 是 Spark 生态系统的核心组件,提供了分布式数据集(RDD)、任务调度和执行引擎、内存计算和优化以及容错性和恢复机制等功能,是构建大数据处理应用程序的基础。
-
Spark SQL:Spark SQL 是 Spark 提供的用于结构化数据处理和查询的模块,它提供了类似于 SQL 的查询语言和 DataFrame API,可以方便地对结构化数据进行查询、过滤、聚合等操作。
-
Spark Streaming:Spark Streaming 是 Spark 提供的用于实时数据处理的模块,它可以将实时数据流分成小批次,并使用 Spark 引擎进行处理,支持复杂的流处理逻辑,如窗口操作、状态管理等。
-
MLlib:MLlib 是 Spark 提供的用于机器学习的库,包括常见的机器学习算法和工具,如分类、回归、聚类、推荐等,可以在分布式环境下进行大规模的机器学习任务。
-
GraphX:GraphX 是 Spark 提供的用于图计算的库,支持图的创建、转换、遍历和计算,可以用于社交网络分析、推荐系统、网络安全等领域。
-
SparkR:SparkR 是 Spark 提供的用于 R 语言的接口,可以在 R 中使用 Spark,利用 Spark 引擎进行大规模数据处理和分析。
-
Spark on YARN:Spark 可以在 Hadoop YARN 上运行,利用 YARN 的资源管理和调度功能来管理 Spark 应用程序的资源,实现在 Hadoop 集群上的分布式计算。
除了以上列举的组件外,还有许多其他与 Spark 相关的工具和技术,如 Spark On Hive、Kafka等,都可以用于扩展和增强 Spark 的功能和性能。整个 Spark 生态系统是一个丰富多样、不断发展的生态系统,为用户提供了灵活、强大的大数据处理解决方案。
相关文章:
从了解到掌握 Spark 计算框架(一)Spark 简介与基础概念
文章目录 什么是 Spark?核心特点 Spark 对比 MapReduceSpark 编程模型RDDDataFrameDataset Spark 运行模式Spark 生态 什么是 Spark? Spark 是一个基于内存的分布式计算框架,最初由加州大学伯克利分校的 AMPLab 开发,后来捐赠给了…...
linux bind函数
bind函数的目的是让把客户端对应的端口(port)地址和ip地址绑定到客户端 [参考](Linux之bind 函数(详细篇)_linux bind函数-CSDN博客)...
Flink系列一:flink光速入门 (^_^)
引入 spark和flink的区别:在上一个spark专栏中我们了解了spark对数据的处理方式,在 Spark 生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由 Spark-core,SparkSQL 实现,流处理由 Spark Streaming 实现&am…...
PySpark特征工程(III)--特征选择
有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 特征工程是数据分析…...
Mongodb的数据库简介、docker部署、操作语句以及java应用
Mongodb的数据库简介、docker部署、操作语句以及java应用 本文主要介绍了mongodb的基础概念和特点,以及基于docker的mongodb部署方法,最后介绍了mongodb的常用数据库操作语句(增删改查等)以及java下的常用语句。 一、基础概念 …...
七大战略性新兴产业崭露头角:新能源电燃灶或将成为未来厨房新宠
近日,在国家发布的七大战略性新兴产业名单中,新能源产业赫然在列,作为其中的重要组成部分,华火新能源电燃灶凭借其独特的优势,正逐渐走进人们的视野,有望成为未来厨房的新宠。 华火新能源电燃灶作为清洁能源…...
C#进阶-用于Excel处理的程序集
在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及…...
持续总结中!2024年面试必问 20 道 Kafka面试题(五)
上一篇地址:持续总结中!2024年面试必问 20 道 Kafka面试题(四)-CSDN博客 九、请解释Kafka中的Zookeeper的作用。 在Kafka中,ZooKeeper扮演着至关重要的角色,主要负责集群管理、协调和状态同步等功能。以下…...
Draw.io 使用详细教程
Draw.io 是一款功能强大的在线绘图工具,适用于创建流程图、网络图、组织结构图、UML 图等。以下是详细的使用教程,包括基本操作、快捷键、常用技巧和进阶技巧。 1. 创建新图 选择存储位置 首次使用时,系统会询问你要将图保存到哪里。你可以…...
人工智能学习笔记(1):了解sklearn
sklearn 简介 Sklearn是一个基于Python语言的开源机器学习库。全称Scikit-Learn,是建立在诸如NumPy、SciPy和matplotlib等其他Python库之上,为用户提供了一系列高质量的机器学习算法,其典型特点有: 简单有效的工具进行预测数据分…...
PromptPort:为大模型定制的创意AI提示词工具库
PromptPort:为大模型定制的创意AI提示词工具库 随着人工智能技术的飞速发展,大模型在各行各业的应用越来越广泛。而在与大模型交互的过程中,如何提供精准、有效的提示词成为了关键。今天,就为大家介绍一款专为大模型定制的创意AI…...
IDEA升级web项目为maven项目乱码
今天将一个java web项目改造为maven项目。 首先,创建一个新的maven项目,将文件拷贝到新项目中。 其次,将旧项目的jar包,在maven的pom.xml做成依赖 接着,把没有maven坐标的jar包在编译的时候也包含进来 <build>…...
存内计算与扩散模型:下一代视觉AIGC能力提升的关键
目录 前言 视觉AIGC的ChatGPT4.0时代 扩散模型的算力“饥渴症” 存内计算解救算力“饥渴症” 结语 前言 在这个AI技术日新月异的时代,我们正见证着前所未有的创新与变革。尤其是在视觉内容生成领域(AIGC,Artificial Intelligence Generate…...
如何上传模型素材创建3D漫游作品?
一、进入3D空间漫游互动工具编辑器 进入720云官网-点击“开始创作”-选择3D空间漫游-进入到作品创建页面。 二、上传模型及素材,创建生成3D空间漫游模型 1.创建3D空间作品:您可以选择新建空白作品或使用720云提供的预设空间模板,本篇主要介绍…...
NFS p.1 服务器的部署以及客户端与服务端的远程挂载
目录 介绍 应用 NFS的工作原理 NFS的使用 步骤 1、两台机子 2、安装 3、配置文件 4、实验 服务端 准备 启动服务: 客户端 准备 步骤 介绍 NFS(Network File System,网络文件系统)是一种古老的用于在UNIX/Linux主…...
性能工具之 JMeter 常用组件介绍(二)
文章目录 一、Thread Group二、断言组件1、Response Assertion:响应断言2、Response Assertion:响应断言3、Duration Assertion:响应时间断言4.、JSON Assertion:json断言 一、Thread Group 线程组也叫用户组,是性能测…...
Bev 车道标注方案及复杂车道线解决
文章目录 1. 数据采集方案1.1 传感器方案1.2 数据同步2. 标注方案2.1 标注注意项2.2 4d 标注(时序)2.2.1 4d标签制作2.2.2 时序融合的作用2.2.2.1 时序融合方式2.2.2.2 时序融合难点2.2.2.2 时序实际应用情况3. 复杂车道线解决3.1 split 和merge车道线的解决3.2 大曲率或U形车道…...
vue 将echart 下载为base64图片
1 echart是页面的子组件, 2 页面有多个echart 3 将多个echart下载为base64图片 // 子组件 echart,要保存echartconst chart this.$echarts.init(this.$refs.chart, light) this.chartData chart; //保存数据,供父组件alarmReport调用(th…...
视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别
在公安和公共安全领域,视频图像信息的应用日益广泛,尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理,GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的,但它们在实际…...
白杨SEO:小红书标题怎么写?小红书怎么推广引流到微信?小红书违规注销不了怎么办?33个小红书运营常见问题解答【干货】
前言:这是白杨SEO公号原创第533篇。为什么想到写这个?因为很多白杨SEO朋友在做小红书遇到这样或那样的问题来问我,所以我把一些问得较多的常见热门问题整理写出来,有需要的可以随时查看,收藏与分享。图片在公众号白杨S…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
