分类 原理分析 中的文章

Spark 注册数据源

DataSourceRegister注册过程,自定阅读XXRelationProvider,DataSource 查找过程,DataFrameReader,DataFrameWriter,CheckpointRDDPartition,ReliableCheckpointRDD,SparkSession内部包含的变量SparkContext、sharedState、SQLContext、RuntimeConfig

阅读全文

Spark Core相关-2

调度过程,RDD的主要函数,DAGScheduler将各个RDD划分到不同stage,每个Stage包含若干个TaskSet,交给内部的并发队列处理事件;TaskScheduler有点像 YARN队列,创建调度池和本地性判断,之后交给SchedulerBackend;MemoryAllocator负责分配内存,包括off-heap和on-heap,其中的MemoryBlock包含了obj指向heap的对象、以及offset和length;TaskMemoryManager负责task的内存管理,MemoryConsumer的实现类负责消费这些内存;Task包括:ShuffleMapTask、ResultTask,TaskContext 会启动新线程运行Task;AppendOnlyMap类似HashMap但做了优化,shuffle和spill的几个类:ExternalSorter、ExternalAppendOnlyMap、ShuffleExternalSorter、UnsafeExternalSorter;ShuffleWriter和实现类体系负责写磁盘,ShuffleReader主要由ShuffleBlockFetcherIterator 去抓取数据,以及管理他们的ShuffleManager;Executor 调用 launchTask,在新线程中启动 TaskRunnerTaskRunner 又会启动 Task;Master和选举;Driver调度过程,Executor分配过程,尽可能跨Worker;集群模式下TaskSchedulerImpl->StandaloneSchedulerBackend->StandaloneAppClinet,跟Master通讯。Master调用launchExecutor给Wroker,Worker拼接ProcessBuilder启动新进程,CoarseGrainedExecutorBackend会跟Worker通讯。YARN cluster和client模式

阅读全文

Spark Core相关-1

SparkContext、存储体系、RPC、Web-UI。 存储体系,BlockManager和BlockManagerMaster、MemoryManager、MemoryStore、DiskBlockManager、DiskStore。监控体系:MapOutputTracker、MapOutputTrackerMaster、MapOutputTrackerWorker。 Web-UI体系:对应的层级结构为: SparkUI -> WebUITab -> WebUIPage。执行环境:安全体系(SecurityManager、用于设置 yarn,hadoop 的 secret key);SparkContext 会附带初始化:Metrics 体系、Listener、SparkUI、RPC 整套体系、BlockManager,storage 体系、Executor 体系、Heartbeater、KVStore、SerializerManager,还有度量类、日志体系。 PRC 体系:MessageLoop 中维护了 Inbox 的链表、每个Inbox 中为了 InboxMessage 的链表,InboxMessage包含很多实现类,如 HeartbeatReceiver ,包括了 receiveAndReply。RPC中用到了 netty的通讯体系,根据发送地址,选择对应的 Outbox,每个 Outbox维护一个 OutboxMessage的链表,再通过netty 的 NettyChannel 发送出去

阅读全文

code-gen

入口点:CollapseCodegenStages,插入WholeStageCodegenExec;对于不支持的,或者 SortMergeJoinExec、ShuffledHashJoinExec 会插入 InputAdapter;代码生成可以看作是两个方向相反的递归过程:代码的整体框架由 produce/doProduce 方法负责,父节点调用子节点。代码具体处理逻辑由 consume/doConsume 方法负责,由子节点调用父节点。整个物理算子树的执行过程被InputAdapter分隔开。boradcast-hash-join跟普通的bhj类似,分割部分插入了InputAdapter。shuffle-hash-join,跟 bhj 类似,只是左右两个子节点都增加了 InputAdapter,作为code-gen 的分割。sort-merge-join 左右两边都是 InputAdapter,对code-gen做了分割,之后调用SortExec 再次增加 InputAdapter,然后是shuffle逻辑,会生成5个代码片段。BroadcastNestedLoopJoin:广播+nested loop实现。CartesianProduct 没有 code-gen

阅读全文

Spark原理-JOIN

join的语法定义,join类型,解析、优化过程,join选择策略:hint、等值、数据size,父hash join: streamedlter 和 buildlter,数据的节点分布,对子节点的要求,JoinedRow 类型;BroadcastHashJoin 和 BroadcastExchange; ShuffleHashJoin 和 ClusteredDistribution,先将数据物化再通过AQEShuffleRead 读取; Shuffle Sort Merge Join,Sort ,Exchange,SortMergeJoinScanner(ExternalAppendOnlyUnsafeRowArray);BroadcastNestedLoopJoinExec ,BroadcastDistribution 等价两个for循环; CartesianProduct 对子节点无要求也是两个for循环; 排序算子执行过程

阅读全文

Spark原理-聚合

聚合的基本原理,聚合方式的分类:Partial、ParitialMerge、Final、Complete;distinct 和 非 distinct聚合;DeclarativeAggregate、ImperativeAggregate,聚合迭代器;基于排序的聚合,自定义函数 V1 和 V2 实现,自定义的 classloader,V2方式的自定义聚合函数,ObjectHashAggregate,基于hash 的聚合;自定义函数下推:标量函数下推、聚合函数下推;基于Hash 的聚会

阅读全文

Spark原理-优化规则

子查询优化:查询合并、展开,一行一列,单行多列,多行单列,多行多列,转换为 exist,子查询上提转join,子查询重写(转为semi/anti join);算子合并:CollapseRepartition、CollapseProject、CombineFilters、CombineUnions;常量折叠和强度消减:NullPropagation 、ConstantPropagation、OptimizeIn、ConstantFolding、ReplaceNullWithFalseInPredicate、CombineConcats;算子简化: LikeSimplification、BooleanSimplification、SimplifyBinaryComparison、PruneFilters、EliminateSerialization、SimplifyExtractValueOps; Rewrite/Replace/Eliminate规则:EliminateOuterJoin、EliminateDistinct、EliminateLimits; 下推规则:PushDownPredicates、PushPredicateThroughNonJoin、PushPredicateThroughJoin、LimitPushDown、ColumnPruning

阅读全文