导图社区 Spark的设计与运行原理
Spark的设计与运行原理,Spark主要特点:运行速度快、容易使用、通用性、模块化、运行模式多样、支持各种数据源。
大数据技术通过一系列先进的技术和方法,从海量数据中提取有价值的信息和知识,为企业和组织提供决策支持。它不仅仅关注数据的收集,更注重数据的存储、处理、分析和可视化,从而帮助用户洞察数据背后的规律和趋势。
Scala语言基础总结思维导图,帮助读者全面了解和掌握Scala编程语言的基本概念和实用技巧。无论你是编程初学者还是有一定经验的开发者,相信都能从本文中获得宝贵的启示和收获。
社区模板帮助中心,点此进入>>
品牌设计分析思维导图
系统开发设计
门户网站功能设计
艺术设计史
APP产品设计
世界现代设计史
图案设计
设计任务管理
详情页设计
图表详解塑料模具设计技巧
Spark的设计与运行原理
概述
Spark主要特点
运行速度快
容易使用
通用性
模块化
运行模式多样
支持各种数据源
Spark生态系统
核心组件
Spark Core
基础功能 主要面向批量数据处理
RDD操作
Spark SQL
处理结构化数据
Spark Streaming
实时流数据处理
Structured streaming
是一种基于Spark SQL引擎构建的可扩展且可容错的流处理引擎
MLlib
机器学习库
算法和工具
GraphX
图计算框架
图并行计算
Spark运行架构
基本概念
RDD
弹性分布式数据集 是分布式内存的一个抽象概念 提供了一种高度受限的共享内存模式
DAG
有向无环图 反映了RDD之间的依赖关系
执行器(Executor)
运行在工作节点上的一个进程,负责运行任务,为应用程序存储数据
应用(Application)
用户编写的spark应用程序
任务(Task)
运行在执行器上的工作单元
作业(Job)
一个作业包含多个RDD及作用于相应RDD上的各种操作
阶段(Stage)
作业的基本调度单位,一个作业会被分为多组任务,每组任务被称为阶段,也称任务集
架构设计
集群资源管理器(Cluster Manager)
工作节点
驱动器(Driver)
执行器
采用主从架构 一个驱动器和若干个Worker
Spark运行基本流程
RDD的设计与运行原理
RDD设计背景
为了优化迭代算法和交互式数据挖掘
RDD概念
弹性分布式数据集 分布式对象集合 本质上是一个只读的分区记录集合
行动操作
用于执行计算并指定输出的形式
转换操作
用于指定RDD之间的相互依赖关系
是粗粒度的数据转换操作
RDD适合对数据集中的元素执行相同操作的批处理式应用,而不适合用于需要异步,细粒度状态的应用
RDD的执行过程
读入外部数据源进行RDD创建
RDD经过一系列的转换操作,每一次都会产生不同的RDD,供给下一次转换操作使用
最后一个RDD经行动操作进行处理,并输出到外部数据源
惰性机制
真正的计算发生在RDD的行动操作中, Spark只记录转换操作所使用的一些基础数据及以及DDD生成的轨迹,而不会触发真正的计算
RDD特性
高效的容错性
不需要通过数据冗余的方式实现容错,而只需要通过RDD父子依赖关系重新计算得到丢失的分区来实现容错,无需回滚整个系统
RDD提供的转换操作都是粗粒度的操作
中间结果持久化到内存
数据在内存中的多个RDD之间进行传递,不需要“落地”到磁盘上,避免了不必要的读写磁盘开销
存放的数据可以是Java对象
避免了不必要的对象序列化和反序列化开销
Spark采用RDD能够实现高效计算的主要原因
RDD之间的依赖关系
窄依赖
一对一的依赖
不包含Shuffle过程
可以实现流水线的优化
宽依赖
涉及多个分区的依赖
包含Shuffle 过程
不可以实现流水线优化
主要区别在于是否包含Shuffle过程
数据的重发
阶段的划分
应用→作业→阶段→任务
具体的划分方法
在DAG中进行反向解析,遇到宽依赖就断开,遇到窄依赖就把当前的RDD加入当前的阶段中
RDD运行过程
创建RDD对象
Sparkcontext负责计算RDD加之间的依赖关系,构建DAG
DAGScheduler负责把DNA图分解成多个Stage,每个Stage中包含了多个丅ask,每个Task会被TaskSchedule分发给各个WorkNode上的Executor去执行
Spark的部署模式
Local,本地模式
Standalone
Spark on Mesos
Spark on YARN
Spark on Kubernetes