分类 原理分析 中的文章

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 发送出去
+13

阅读全文

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
3 1 2 4 spark性能优化+7

阅读全文

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循环; 排序算子执行过程
1 2 3 4 5 6 7 8+30

阅读全文

Spark原理-聚合

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

阅读全文

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
+9

阅读全文

Spark原理:逻辑计划解析、扩展点、catalog等

逻辑计划扩展,注入点。TreeNode的两个子类:Expression,QueryPlan。而 QueryPlan。而QueryPlan的子类是:LogicalPlan、SparkPlan。并将规则分为Batch。 CatalogV2Util#loadTable会解析:库、表、列信息,ResolveReferences。内置的一堆优化规则。查询下推、join下推。SPark的catalog体系,主要拷贝各种SupportRead、Wirte、Dialect,各种数据源的Catalog扩展如HiveCatalog。SessionCatalog 会使用hive 的meta-store走老的catalog路线。自定义函数下推,继承UnboundFunction、ScalarFunction、AggregateFunction,使用Spark的线程上下文classloader 机制加载类,也是用 新Catalog扩展如MyCatalog去执行loadFunction、functionExists
spark注入规则 https://malinxiao.files.wordpress.com/2021/12/image-96.png https://malinxiao.files.wordpress.com/2021/12/image-93.png https://malinxiao.files.wordpress.com/2021/12/image-101.png https://malinxiao.files.wordpress.com/2021/12/image-102.png https://malinxiao.files.wordpress.com/2021/12/image-121.png+13

阅读全文

最近文章

分类

归档

标签

RSS