从了解到掌握 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 提供了一系列的转换操作(如mapfilterreduceByKey等)和行动操作(如collectcountsaveAsTextFile等),可以进行数据的转换和计算。

  • RDD 具有容错性,如果某个分区的数据丢失或出错,Spark 可以根据 RDD 的血统重新计算丢失的数据分区,保证计算结果的正确性。

DataFrame

  • DataFrame 是一个分布式的、带有命名列的数据集,类似于关系型数据库中的表。

  • DataFrame 提供了结构化的数据处理功能,支持类似 SQL 的查询操作和列操作,如selectfiltergroupBy等。

  • 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 生态

  1. Spark Core:Spark Core 是 Spark 生态系统的核心组件,提供了分布式数据集(RDD)、任务调度和执行引擎、内存计算和优化以及容错性和恢复机制等功能,是构建大数据处理应用程序的基础。

  2. Spark SQL:Spark SQL 是 Spark 提供的用于结构化数据处理和查询的模块,它提供了类似于 SQL 的查询语言和 DataFrame API,可以方便地对结构化数据进行查询、过滤、聚合等操作。

  3. Spark Streaming:Spark Streaming 是 Spark 提供的用于实时数据处理的模块,它可以将实时数据流分成小批次,并使用 Spark 引擎进行处理,支持复杂的流处理逻辑,如窗口操作、状态管理等。

  4. MLlib:MLlib 是 Spark 提供的用于机器学习的库,包括常见的机器学习算法和工具,如分类、回归、聚类、推荐等,可以在分布式环境下进行大规模的机器学习任务。

  5. GraphX:GraphX 是 Spark 提供的用于图计算的库,支持图的创建、转换、遍历和计算,可以用于社交网络分析、推荐系统、网络安全等领域。

  6. SparkR:SparkR 是 Spark 提供的用于 R 语言的接口,可以在 R 中使用 Spark,利用 Spark 引擎进行大规模数据处理和分析。

  7. Spark on YARN:Spark 可以在 Hadoop YARN 上运行,利用 YARN 的资源管理和调度功能来管理 Spark 应用程序的资源,实现在 Hadoop 集群上的分布式计算。

除了以上列举的组件外,还有许多其他与 Spark 相关的工具和技术,如 Spark On Hive、Kafka等,都可以用于扩展和增强 Spark 的功能和性能。整个 Spark 生态系统是一个丰富多样、不断发展的生态系统,为用户提供了灵活、强大的大数据处理解决方案。

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

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

相关文章

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 21,天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提:二叉搜索树 思路:根据二叉搜索树的中…

李廉洋:5.29黄金早盘2365-2345区间,今日行情走势分析及策略。

黄金消息面分析:当前美国存在一个令人担忧且未被充分关注的问题:房地产行业低迷、高利率和抵押贷款利率、租金高涨以及美联储的紧缩政策构成了一个恶性循环。由于高房价和高抵押贷款利率,美国住房经济活动远低于两年前的水平。为了让该行业好…

Post Microsoft Build and AI Day 上海开发者日

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 这个六一怎么过?来微软 Reactor,一起过儿童节吧! 6月1日,Microsoft Azure & Microsoft Reactor 面向大小朋友特别推出六一特辑,「Post Mic…

【原创】java+springboot+mysql日程管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Mac | Mac 移动硬盘无法分区问题

现象问题 电脑配置:MacBook Pro M1,系统 Sonoma Mac 系统新升级了 Sonoma,结果出现各种问题。外接屏幕居然不能旋转 90 ,查了一下是Sonoma系统导致的,以及莫名发热的问题。想着要么回退一下系统算了,于是网…

基于tensorflow的咖啡豆识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、前期工作 1. 设置GPU import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:tf.config.experimental.set_memory_gr…

Redhat9 LAMP安全配置方案及测试

目录 数据库主机 安装Mariadb数据库服务 设置mariadb开机自动启动 Php主机 部署Apache服务器 设置apache服务开机自启 安装php 安装 phpMyAdmin 打开测试机 更新软件包列表: 首先,确保你的软件包列表是最新的。打开终端并输入以下命令&#xf…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说,远程访问的便利性提供了许多机会和可能性。作为一种高效的工具,【天联】具有广泛的应用场景,可以实现异地统一管理、协同办公以及远程数据采集…

咖啡看书休闲时光404错误页面源码

源码介绍 咖啡看书休闲时光404错误页面源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 源码效果 源码下载 咖啡看书…

WEB安全:Content Security Policy (CSP) 详解

Content Security Policy (CSP) 是一种强大的网页安全机制,用于防止跨站脚本 (XSS) 和其他注入攻击。通过设置一系列的内容安全策略,CSP 可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。 什么是 XSS 攻击? 跨站脚本攻击 (XSS) 是一种常见的安全漏洞,攻击者…

2024年JAVA、C++、Pyhton学哪种语言更容易进国央企?

对于不同编程语言在进入国有企业的观点大体是正确的,不过在实际选择时还需考虑一些因素。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信…

“2024南京智博会”共同探索智能科技产业创新发展新路径

随着全球数字化浪潮的深入推进,智慧城市、物联网与大数据等领域的发展成为推动经济社会发展的重要力量。在这样的背景下,2024南京国际智慧城市、物联网、大数据博览会(南京智博会)的举办,无疑为国内外企业提供了一个绝…

如何成为一名合格的JAVA程序员?

如何成为一名称职的Java编程人员?你一定不能错过的两本书。 第一本《Java核心技术速学版(第3版)》! 1.经典Java作品《Java核心技术》的速学版本,降低学习门槛,帮助读者更容易学习Java,更快地把…

基于ssm的微信小程序的居民健康监测系统

采用技术 基于ssm的微信小程序的居民健康监测系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 后端页面 用户信息管理 健康科普管理 公告管理 论坛…

C++线程任务队列模型

功能描述 实现一个任务队列,用于任务的执行 任务队列 任务队列可以添加、删除任务,实现对任务的管理添加任务后,任务队列可以开始执行任务队列执行任务方式为串行执行 任务 任务执行需要持续一段10s内随机的时间,执行过程通过…

每天五分钟深度学习:如何使用计算图来反向计算参数的导数?

本文重点 在上一个课程中,我们使用一个例子来计算函数J,也就相当于前向传播的过程,本节课程我们将学习如何使用计算图计算函数J的导数。相当于反向传播的过程。 计算J对v的导数,dJ/dv3 计算J对a的导数,dJ/da&#xf…

JVM学习-字节码指令集(一)

概述 Java字节码对于虚拟机,好像汇编语言对于计算机,属于基本执行指令Java虚拟机的指令由一个字节长度的,代表某种特定操作含义 的数字(称为操作码Opcode)以及跟随其后的零至多个代表此操作所需参数(操作数,Operands)而构成&…

如何实时掌握手机号状态的API利器分析

在移动互联网的时代,手机号码不仅是通信的连接点,也是用户身份的关键识别。手机状态查询API 通过提供实时的手机号码状态查询服务,协助企业和组织更有效地管理用户信息,提升服务流程。 手机状态查询API 通过与电信运营商的数据库进…

UE5 使用外置摄像头进行拍照并保存到本地

连接外置摄像头功能:https://docs.unrealengine.com/4.27/zh-CN/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/ 核心功能:UE4 相机拍照功能(图片保存)_ue 移动端保存图片-CSDN博客 思路是: …

《python编程从入门到实践》day41

# 昨日知识点回顾 用户注销、注册,限制访问,新主题关联到当前用户 # 今日知识点学习 第20章 设置应用程序的样式并部署 20.1 设置项目“学习笔记”的样式 20.1.1 应用程序django-bootstrap4 # settings.py ---snip--- INSTALLED_APPS [# 我的应用程序…