SparkEnv-memory-block-shuffle
2024-12-04 10:45:52 0 举报
Spark计算框架
作者其他创作
大纲/内容
stage
010101
0
acquireExecutionMemory
null
spill
FinalRDD
计算机:内核对内存分页进程->跟内核申请page虚地址、物理地址spark 管理数据 page
k1
40%
java
数组扩容2倍System.arraycopy
UnifiedMemoryManager
metricsSystem
page
storage
RDDS
diskStore
reader
BlockManagerMaster
java的常识:object 有浪费空间的嫌疑!
execution
blockManager
inMemSorter排序排索引
业务民生金融医疗电力。。
task
300M
data:Array[AnyRef]
sparkEnv
long[]第一个元素面向long[]的偏移量:16
cpu:寄存器
base+offset
ReduceTask
registerShufflenew ShuffledRDD()--dep--handle
recordBase
ByteArray
v1
XRDDMapPartitionsRDD
1
BlockManagerMasterEndpointRef
60%onHeapExecution
sparkContext
RDD
growArray
indexk1
k22
size
循环规避碰撞线性探测再散列
Task是一个载体runTask()XRDD ?
getReadercomput(){getReader}
spark溢写也是必须触发磁盘的
MemoryManager
2
ShuffleDependency
addr
对外服务rddshufflebroadcast
AppendOnlyMap
spark.memory.fraction 0.6spark.memory.storageFraction 0.5spark.memory.offHeap.size 300M
GDT
4Blength
pageCursor
map
dep.partitioner.numPartitions <= bypassMergeThreshold (200)
BypassMergeSortShuffleHandle
allocateArray
serOutputStream
MemoryConsumer
数组容量64*2元素类型是4个Byte2*n2*n+1
dag
disk1.6<
executor pool
shuffleHandle
BlockManager
insertAll
头
Task
Task是一个载体runTask()FinalRDD ?
index
存储在本机的磁盘中
K1
offsetInPage
array
hash % n
ExternalSorter
shuffleManager
什么是数据?01什么是索引、元数据线性地址空间
k1 bytes
shuffle管理器:SortShuffleManager(老版本中有HashShuffleManager)分区器partitioner:hashpartitionerrangepartitioner
HeapMemoryAllocator
WritablePartitionedPairCollection
task thread
taskmm
unsafe
serializerJavaSerializer
data
reduce0
Driver
内存缓冲数据(多种分区的)溢写成小文件(包含不同分区的)最终是通过归并算法的IO拼接
reduce1
bit(1/0)。。。byte(8bit)。。。page(n)kB
kernel
SortShuffleManager
putInt
16B
acquireMemory
磁盘diskBlockManager
v11
50%onHeapStorage
off
map的归并小文件小文件多磁盘随机读写,性能特别慢
spark,安分区输出数据到独立的文件,最后线性IO拼接
heap
dependency.serializer.supportsRelocationOfSerializedObjectskryo
20
off heap
k2
v2
MemoryLocation
pageNumber
spark
executor jvm
reduce2
File
page页
不管怎么样,即便数据被多次利用,都得通过磁盘IO
UnsafeMemoryAllocator
maptask
工商-》企业法院-》公积金-》爬虫公司。。。。。征信-》(绝对隐私!)
memoryStore
hdfs会把数据存储在磁盘中
Executor
面试sqldataset
ShuffleExternalSorter
writer因果关系:
有可能是堆外有可能是堆内缓冲区(只能存byte[])
ExecutionMemoryPool
arraylong[]
byte[]
diskBlockManager
数据:
16
PartitionedPairBuffer
task?pipeline-》迭代器嵌套调用嵌套调用-》从后向前调用,从前向后返回rdd1->rdd2->rdd3rdd3.iteriter.hasNextiter.nextRDD是个抽象类,是不是有子类iterator()--》 comput()
BlockManagerMasterEndpoint
base
curSize
?
offset
SerializedShuffleHandle
allocatePage
NettyBlockTransferService
HashMaphashtable:数组+链表用一个一维数组行不行?key->val
内存
mapTask
copyMemory
1,对象 > 序列化2,jvm堆里 > java 堆(堆外)3,堆外只能是字节数组序列化器支持RelocationOfSerialized不能有map端聚合 a*3%2下游分区数不能超过 16777215
如果计算期望在map端聚合:combine下游分区超过200:弊端:小文太多,IO太多
k10
MemoryBlock
on heap
baidu搜索引擎公司比你父母还了解你
data segment
框架
mem
JAVA 16G c语言-> Xmx=2G class<2G on heap 约束
numPartitions > 16777215
insertRecordIntoSorter
client
dep.mapSideCombine: false
RDDShuffledRDD
PartitionedAppendOnlyMap
计算流程梳理完:开始扣细节Spark计算框架如何支撑的分布式计算过程继续源码分析:【计算框架】[自带存储层]
MapReduce
parkunpark
这个小文件包含不同的分区数据{排序}
虚拟映射
acquireStorageMemory
disk
TaskMemoryManager
writer
getWriterwrite(rdd3.iterator())
on heapXmx 1Gjvm
what、why、how:groupByKeysortByKeycombineByKey
MemoryManageron heapoff heap
CAS
上下游任务task怎么完成最优的计算和拉去数据
write
broadcastManager
spark 从上到下框架: 序列化、反序列化、内存利用率、IO每一个单点: unsafe
BaseShuffleHandle
map的输出
归并成一个文件分区有序索引文件
output
40
SizeTrackingAppendOnlyMap
partitionId
v1bytes
unsafe:有能力控制堆外内存和堆内内存的
随机读写
allocateMemory
StorageMemoryPool
cache
如果又有一个maptask输出到hdfs
src
on
arrayBaseOffset(long[].class)
v23
技能
资源层,standalone/yarn/mesos/k8s
file
50%
reduceByKey
dependency.aggregator.isDefined
unsafe3个东西
rpcEnv
changeValue
MemoryPool
Spillable
serBuffer
input
mmap
recordAddress
BypassMergeSortShuffleWriter
insertRecord
文件
前置条件:数据被多次利用可以放入内存
取第一个元素面向对象的offset
buffer
mapOutputTracker
SortShuffleWriter
taskMemoryManager
UnsafeShuffleWriter
必须有排序
byteArray
obj
OFF HEAP MEMORY
long[*] obj
0 条评论
下一页