Spark@图解
2024-12-04 10:44:09 0 举报
spark原理
作者其他创作
大纲/内容
shuffle-write
Spark部署的mode:client(Driver跑在client的jvm上)cluster(Driver跑在某个节点的jvm上)为什么:
存储层
重点:在操作RDD的原子操作中,不要使用新生成的对象,要是用迭代器。因为数据量很大,使用新对象会产生大量对象导致内存溢出,使用迭代器获取并传递处理,不影响通道的作用。
Woker
RDD01
node02
mapTask
hive
MapReduce架构spark架构wordcount源码大数据
reduceTask
compute(Partition):Iteratorinpuformat.recordreader
应用层
p1
comput()
p3
task
prev
Sparkcontextcreate
foreach( println)
src
Block01
资源管理
shuffle-read
iter
HDFS
YARN
clientjvm
LineAge血统
资源层
shuffle
子分区
OneToOneDependency
deps(dependencies)因为是第一个RDD,因此向前的依赖是Nil
SPARK WORDCOUNT 源码分析
人类的思维角度:你的数据加工逻辑是不是安装相同的key为一组操作
同yarn交互
mr需要人为实现数据集迭代逻辑
Executor
使用编程模型
MapPartitionsRDD
计算层
PipeLine
4
p0
可多个task 进行shuffle-read和shuffle-write进行前后关联
1:1
File.txt
SparkContext
窄依赖
MappartitionsRDD
mapreduce
DataNode
Block00
map()filterflatmapmap
NextIterator
start-history-server.sh
父分区
Driver调度任务资源申请SparkContext
Master
input
deps
mapflatmapfilter
1
物理机
block1
NarrowDependency
ResourceManager
desc
笔记本听歌上网打游戏
MR相对简单,只有2个阶段每到一步,申请具体的资源任务是JVM级别,计算逻辑是已知的Spark,逻辑是未知的:每个人的程序,job,stage数量不一。DAG 作用是把一个job 切成几个stage。spark:默认倾向于抢占资源 在SparkContext会生成一堆的Executor,先去抢占资源,只有在资源抢占成功后向Driver注册好后才会去执行任务走业务逻辑。任务:task以线程的形式跑在Executor进程里
Dependency
ApplicationMasterMR或Spark调用yarn的接口
spark
HBase
compute(P):IteratorshuffleManager.getReader.read()
yarnspark基于yarn的部署
yarn
reduce
术语:Applicationjob stage 步骤task比例:1个app:1job (启动一个程序如:wordcount)1job:1~2stage1stage:N@task多个mr的job可以组成作业链InputFormatTextInputFormat1:client:splits2:mt:lineRecordreader
node08
shuffleshuffleManager
reduceByKeygroupByKey
cachecheckpoint
分区
RDD
NameNode
术语:Applicationjobstagetask比例:1个app:1job1job:1~2stage1stage:N@task多个mr的job可以组成作业链InputFormatTextInputFormat1:client:splits2:mt:lineRecordreader================比例:复用资源 spark1个app:N - job1job:N-stage1stage:N@taskRDD 可以复用的
2
shuffleMapTask
MR
history
spark RDD
prevRDDpartserializerkeyOrderingaggregatormapSideCombine<ShuffleDependency>
standalonespark自身简单的部署模式
clientjob
5
分区:父分区1:N子分区shuffle依赖(宽依赖)
map
nodeManager
node07
controller控制算子
面向数据集的操作
@transient禁止序列化为了打断前面的代码关联,为了让自己单跑,不让前面的代码再次重跑
HadoopRDD
iterator
output
DT
Nil空
File文件
MR只能开机听歌关机、开机上网关机、开机打游戏关机
数据移动:IO移动shuffle移动 (数据要根据计算才能知道去哪台机器)
hdfs
集群搭建
action执行算子
3
transformation转换算子
foreach()collect()saveasfile()
架构->角色->功能
node09
metastore
flatMap( _.split(\" \") )
key没有发生变化分区器没有发生变化分区数没有发生变化且你是kv的尽量不要产生shuffle那么建议:mapValues flatMapValues
mesos/k8s
计算层自己
RangeDependency
reduce()reduceByKey
writer.write()
outputfilelocal
前一个RDD的地址
map reduce
分区:父分区1:1子分区窄依赖
getPartitions()inpuformat.getSplits根据多少个切片获取到多少个分区
RDD02
block2
p2
spark 具备 计算程序启动后,为自己维护一个分布式存储系统
reduceByKey( _+_ )
textFile()
map-stage
getDependencies
ShuffleDependency
runJob
node01
Nil
textFile()parallelize
ShuffledRDD
reduce-stage
shuffle依赖
partitioner分区器
0 条评论
下一页