当前位置: 首页 > news >正文

Spark Core 3.3.2 略讲~

在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述

前言

在这里插入图片描述

一、概述

  1. 简介

    • Apache Spark 是快速通用的分布式计算引擎,诞生于加州大学伯克利分校AMP实验室,基于内存计算,适用于迭代算法(如数据挖掘、机器学习)。
    • 核心优势:中间结果缓存于内存,减少磁盘IO,比Hadoop MapReduce快10-100倍。
  2. 历史

    • 2009年始于伯克利大学,2010年开源,2014年成为Apache顶级项目。
    • 主要创始人Matei Zaharia创立了Databricks公司,推动Spark商业化。
  3. 与MapReduce对比

    特性MapReduceSpark
    编程模型仅Map和Reduce支持多种算子(map、flatMap等)
    运算效率中间结果写入磁盘,IO开销大中间结果存内存,基于DAG优化调度
    适用场景离线计算离线+实时计算
    数据共享依赖HDFS读写内存缓存复用
  4. 核心特点

    • :内存计算+DAG引擎,速度远超MapReduce。
    • 易用:支持Scala、Java、Python等多语言,提供80+高级算法。
    • 通用:一站式支持批处理(Spark Core)、交互式查询(Spark SQL)、流处理(Spark Streaming)、机器学习(MLlib)、图计算(GraphX)。
    • 兼容:可整合Hadoop生态(HDFS、YARN等)。

二、核心组件

  1. Spark Core

    • 核心组件,负责离线批处理,提供RDD(弹性分布式数据集)抽象。
  2. 其他组件

    • Spark SQL:结构化数据查询,支持SQL和DataFrame。
    • Spark Streaming:准实时流处理,基于DStream。
    • MLlib:机器学习库,包含分类、回归等算法。
    • GraphX:图计算库,支持图算法(如PageRank)。

三、运行架构

  1. 核心角色

    • Driver:负责任务调度、DAG生成、与集群通信。
    • Executor:运行Task,缓存数据,位于Worker节点。
    • Cluster Manager:资源管理器(支持Standalone、YARN、K8s等)。
  2. 运行流程

    • 提交应用→Driver申请资源→Executor反向注册→解析代码生成RDD→DAG调度划分Stage→Task分发至Executor执行。
  3. 运行模式

    • Local:本地模式,用于调试,单进程多线程模拟集群。
    • Standalone:Spark自带集群模式,Master-Worker架构。
    • YARN:整合Hadoop YARN,国内主流模式,支持Client/Cluster部署。
    • Kubernetes:容器化部署,支持动态资源调度。

四、核心编程

  1. RDD(弹性分布式数据集)

    • 定义:不可变、可分区、并行计算的分布式数据集合,通过血统(Lineage)实现容错。
    • 五大属性:分区列表、分区计算函数、依赖关系、分区器(可选)、首选计算位置(可选)。
    • 创建方式
      • 内存集合(parallelize/makeRDD
      • 外部文件(textFile/wholeTextFiles
  2. 算子

    • 转换算子(Transformation):懒执行,返回新RDD(如mapfilterreduceByKey)。
    • 行动算子(Action):触发计算,返回结果(如collectcountforeach)。
    • 控制算子cache(内存缓存)、persist(磁盘缓存)、checkpoint(持久化并切断依赖)。
  3. 宽依赖与窄依赖

    • 窄依赖:父RDD分区与子RDD分区一对一(如map),可并行计算。
    • 宽依赖:父RDD分区与子RDD分区多对多(如groupByKey),会产生Shuffle。

五、Shuffle机制

  1. 定义:数据在分区间重新分布的过程,涉及大量磁盘IO和网络传输,是性能瓶颈。

  2. Spark Shuffle类型

    • Hash Shuffle:早期实现,小文件过多,已被淘汰。
    • Sort Shuffle:主流实现,按Key排序,合并小文件,减少IO。
      • SortShuffleWriter:内存排序+溢写合并。
      • BypassMergeSortShuffleWriter:非聚合场景优化,避免排序。
  3. 优化建议

    • 启用Map端预聚合(如reduceByKey替代groupByKey)。
    • 调整缓冲区大小(spark.shuffle.file.buffer)和并行度(spark.default.parallelism)。
    • 压缩Shuffle数据(spark.shuffle.compress)。

六、内存管理

  1. 统一内存管理(默认)

    • 内存分为:存储内存(缓存RDD)、执行内存(Shuffle等计算)、其他内存(用户数据结构)。
    • 动态借用机制:存储与执行内存可互相借用,执行内存可强制收回。
  2. 配置参数

    • spark.memory.fraction:统一内存占JVM堆比例(默认0.6)。
    • spark.memory.storageFraction:存储内存占统一内存比例(默认0.5)。

七、应用场景

  • 离线批处理(日志分析、数据清洗)。
  • 实时流处理(监控告警、实时推荐)。
  • 机器学习(模型训练、预测)。
  • 图计算(社交网络分析、路径规划)。

结尾

Spark Core是Spark生态的基础,通过内存计算、DAG优化和丰富的算子,大幅提升分布式计算效率。其核心是RDD抽象和Shuffle机制,结合多模式部署和内存管理优化,成为大数据处理的主流引擎。实际应用中需根据场景选择合适的运行模式和算子,重点优化Shuffle和内存使用以提升性能。

今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述

http://www.dtcms.com/a/326923.html

相关文章:

  • Elasticsearch JavaScript 客户端「基础配置」全指南(Node/TS)
  • 人工智能+虚拟仿真,助推医学检查技术理论与实践结合
  • 运维的一些指令
  • LINUX812 shell脚本:if else,for 判断素数,创建用户
  • 使用Excel制作甘特图
  • GitLab CI + Docker 自动构建前端项目并部署 — 完整流程文档
  • Web 开发 14
  • Linux环境gitlab多种部署方式及具体使用
  • 自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
  • Mac如何安装telnet命令
  • GIT使用攻略
  • 全面解析MySQL(5)——“索引、事务、JDBC”三大核心
  • WPF开发利器:MahApps.Metro 现代化UI框架
  • leetcode3258:统计满足K约束的子字符串数量Ⅰ(变长滑动窗口详解)
  • 文件IO(1)
  • Win10系统Ruby+Devkit3.4.5-1安装
  • 後端開發技術教學(五) 魔術方法、類、序列化
  • SVG交融效果
  • Fluent Bit 日志合并正则表达式(下)
  • 【Flowable】核心概念、核心表字段、关联关系以及生命周期
  • python3.10.6+flask+sqlite开发一个越南留学中国网站的流程与文件组织结构说明
  • GM3568JHF快速入门教程【二】FPGA+ARM异构开发板环境编译教程
  • 嵌入式硬件——ARM
  • Apache虚拟主机三种配置实战
  • 为什么灰度图用G(绿色)通道?
  • Gradient Descent for Logistic Regression|逻辑回归梯度下降
  • 物理服务器内存容量选择:大数据分析场景下的适配指南
  • 互连的带宽
  • 终端安全检测和防御技术
  • 2-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸理论基础与NSE脚本