包含标签 Spark 的文章

Spark和Flink的对比总结(包含Operator)

SparkFlink在计算模型和运维方式上的差异放到一起看,重点包括:

  • 先看 Spark 处理流Flink 处理批 的天然短板,理解为什么 Spark 更偏微批、Flink 更偏实时,而不是简单说谁“全能”
  • 重点拆 Shuffle、checkpoint、反压、内存模型、代码生成 这些底层机制,解释两者性能差异为什么会落到 I/O、CPU 和延迟上
  • 再把 spark-submit、Thrift Server、Spark Operator、Livyflink run、Flink Kubernetes Operator、REST API、SQL Client、Application Mode 摆在一起比较
  • 最后落到实用选择:如果目标是 批处理吞吐、流式低延迟、K8s 原生部署、CI/CD 自动化、SQL 接入,Spark 和 Flink 分别更适合什么场景

阅读全文

Spark 注册数据源

总结:

  • DataSourceRegister 的注册方式,以及自定义 XXRelationProvider 是怎么被 Spark 发现和加载的
  • DataSource 的查找过程,以及 DataFrameReaderDataFrameWriter 在读写路径里的角色
  • 顺手补到 CheckpointRDDPartitionReliableCheckpointRDDSparkSession 内部的 SparkContextsharedStateSQLContextRuntimeConfig

阅读全文

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

阅读全文

Spark的一些优化

web-ui观察 executor指标:失败,shuffle,cache,CPU,内存,RDD数量,GC;stage关注 DAG,也是shuffle等数据,还有 Event Timeline。shuffle优化方式:增加并行度,group by变成局部聚合+全局聚合;转为 BHJ,大表 join 大表的 外表加盐,内表复制N份,再去盐gourp原始id,最后聚合;shuffle原理,HashShuffleManager(废除),SortShuffleManager。 with 缓存优化,查询下推,自动倾斜join优化,LIMIT大数量优化,bucked join,4表join转为2个2个join增加并行度。RSS,向量化, AQE
+4

阅读全文

spark 的 streaming

spark streaming的基本原理,包括MicroBatchExecution,ContinuousExecution,通过IncrementalExecution + 状态实现micro-batch 并复用了spark 的所有查询逻辑;Source接口支持 getOffset,commit,可以自定义各种扩展实现;Sink包括:FileStreamSink、KafkaSink、DeltaSink、、ForeachBatchSink,ForeachWriteTable;Stateful将信息存如StateStoreRDD,保存到 HDFSBackedStateStoreProvider、RocksDBStateStoreProvider 中;Stream-Stream Join使用了StreamingSymmetricHashJoin,需要保证状态;Session Window同样也是通过插入一些流相关的算子 + 状态保存实现的
+22

阅读全文

Spark的 数据分布

Distribution及相关类,Partitioning类,Partitioner类,排序的物理算子,UnsafeExternalSorter 和UnsafeInMemorySorter,spill和归并排序;shuffle操作,ShuffleDependency,ShuffleRowRDD,map端的ShuffleMapTasks,reduce端 ShuffleDependency 从shuffle manager 那里读取数据,拿到MapStauts 状态;ShuffleManager 包含了ShuffleWriter,ShuffleReader;BypassMergeSortShuffleWriter 、UnsafeShuffleWriter、SortShuffleWriter、、BlockStoreShuffleReader
+5

阅读全文

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

阅读全文

最近文章

分类

归档

标签

RSS