- 博客(27)
- 收藏
- 关注
原创 spark 广播变量broadcast
broadcast使用如下图,可以看到创建broadcast是val barr1 = sc.broadcast(arr1),使用broadcast是barr1.value创建broadcast是使用的broadcastManager。
2024-07-22 15:29:20
809
原创 spark 事件总线listenerBus
图片来源:https://blog.csdn.net/sinat_26781639/article/details/105012302。
2024-07-17 17:59:32
672
原创 spark 读操作
Shuffle read的入口是ShuffleRDD的compute方法。它获取shuffleReader,执行对应的read方法。创建reader的时候首先获取要读的shuffle block对应的信息,创建shuffle reader。read创建wrappedStreams:Iterator[(BlockId, InputStream)],一个block对应一个input streamrecordIter 将stream中数据反序列成(k,v)metricIter 遍历统计。
2024-07-15 14:48:30
1296
1
原创 spark shuffle写操作——UnsafeShuffleWriter
使用long类型packedRecordPointer存储数据。数据结构为:[24 bit partition number][13 bit memory page number][27 bit offset in page]
2024-07-10 17:25:40
866
原创 spark shuffle写操作——SortShuffleWriter
写入的简单流程:1.生成ExternalSorter对象2.将消息都是插入ExternalSorter对象中3.获取到mapOutputWriter,将中间产生的临时文件合并到一个临时文件4.生成最后的data文件和index文件可以看到写入的重点类是ExternalSorter对象。
2024-07-08 11:50:48
910
原创 spark shuffle写操作——BypassMergeSortShuffleWriter
每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters。
2024-07-05 15:44:09
445
原创 spark shuffle——shuffle管理
shuffle系统的入口。ShuffleManager在driver和executor中的sparkEnv中创建。在driver中注册shuffle,在executor中读取和写入数据。registerShuffle:注册shuffle,返回shuffleHandleunregisterShuffle:移除shuffleshuffleBlockResolver:获取shuffleBlockResolver,用于处理shuffle和block之间的关系。
2024-07-05 11:09:48
1015
原创 spark调度体系——task执行
executor收到LaunchTask消息后,先将消息解码成TaskDescription对象,再调用launchTask方法执行。runTask是抽象方法,具体实现是在子类ResultTask和ShuffleMapTask中。taskBinary反序列化成(rdd, func),调用func方法返回结果。创建TaskRunner的线程包装类,用于执行task。Task是抽象类,run方法中是调用了runTask方法。ResultTask是结果task,最终是返回结果。
2024-06-27 19:23:04
303
原创 spark调度体系——stage/task提交
stage提交入口是在DAGScheduler类的handleJobSubmitted方法最后,调用submitStage提交最后一个stage。遍历stage,根据isAvailable判断stage是否完成。这里只会向上找一层的shuffleMapStage。如果shuffle输出结果数量达到对应numPartitions,则表示shuffle完成,即shuffleMapStage完成。
2024-06-24 14:35:46
409
原创 spark调度体系——stage划分
rdd中的action算子,会触发job任务计算。以collect算子举例,可以看到最后是调用的DAGScheduler的submitJob方法DAGScheduler的runJob调用的是submitJob方法。submitJob是先生成新的jobId,发送JobSubmitted的消息。DAGScheduler收到JobSubmitted消息后,调用handleJobSubmitted方法。handleJobSubmitted调用createResultStage方法。
2024-06-20 18:15:21
492
原创 spark存储体系——BlockManager
BlockManager类是在driver和executor上运行,提供了存储的接口。用户只需要调用BlockManager相关的方法就可以完成存储相关的功能。
2024-06-07 20:24:47
763
原创 spark存储体系——blockManager的RPC
blockManager的RPC:● BlockManagerMasterEndpoint:rpc节点,管理所有的BlockManager● BlockManagerMasterHeartbeatEndpoint:rpc节点,处理blockManager的心跳● BlockManagerMaster:封装了主节点和心跳节点● BlockManagerSlaveEndpoint:rpc节点,用来处理block相关的消息。
2024-06-07 16:53:07
204
原创 spark存储体系——blockInfo管理(锁)
● BlockInfoManager:管理block的元数据,同时也提供了block加锁的功能。
2024-06-07 14:15:02
421
原创 spark 存储体系——磁盘
磁盘存储主要是DiskBlockManager和DiskStore两个类。比较简单。DiskBlockManager:block和磁盘文件对应关系DiskStore:将block实际写入磁盘文件。
2024-06-06 19:40:57
394
原创 spark 内存管理(源码)2
管理单个任务分配的内存。一个task对应一个TaskMemoryManager.一个TaskMemoryManager包含多个consumer.
2024-05-24 11:16:56
375
1
原创 spark 内存管理(源码)1
spark的内存管理相关的类主要是org.apache.spark.memory包下面(java和scala两部分).spark的内存管理实际上是对jvm内存的管理的一个逻辑规划,包括分配内存、释放内存等。org.apache.spark包重点介绍了相关实现类。MemConsumer是spark中不同组件和场景使用内存的客户端(TaskMemoryManager的客户端),使用它来操作内存。TaskMemoryManager是管理task的内存,它是MemoryManager的客户端。
2024-05-23 10:23:41
641
1
原创 spark worker组件分析
Worker是Spark在local-cluster部署模式和Standalone部署模式中对工作节点的资源和Executor进行管理的服务。Worker一方面向Master汇报自身所管理的资源信息,一方面接收Master的命令运行Driver或者为Application运行Executor。同一个机器上可以同时部署多个Worker服务,一个Worker也可以启动多个Executor。当Executor完成后,Worker将回收Executor使用的资源。
2024-01-05 08:49:45
562
1
原创 spark master组件分析
master只有在local-cluster和standalone部署模式下存在。Master的职责包括Worker的管理、Application的管理、Driver的管理等。Master负责对整个集群中所有资源的统一管理和分配,它接收各个Worker的注册、更新状态、心跳等消息,也接收Driver和Application的注册。
2023-12-29 18:18:16
1158
1
原创 spark rpc(组件间通信)
spark 组件间通信原本使用的是akka。后来改成了用netty实现了一个类似akka的框架。主要类在 spark-core的rpc包下面。
2023-12-24 22:58:52
902
1
原创 spark rpc(网络通信)
TransportContext:传输上下文,包含了用于创建传输服务端(TransportServer)和传输客户端工厂(TransportClientFactory)的上下文信息,并支持使用Transport-ChannelHandler设置Netty提供的SocketChannel的Pipeline的实现。TransportConf:传输上下文的配置信息。RpcHandler:对调用传输客户端(TransportClient)的sendRPC方法发送的消息进行处理的程序。
2023-12-20 16:44:52
1085
1
原创 spark 持久化解析
checkpoint在本地生成了文件,因为并行度是2,所以有part-00000和part-00001两个数据文件。作业停止后,本地文件依然存在。所以如果不需要,就手动删除。
2023-12-12 08:28:15
951
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人