Spark源码解析 - 分布式计算执行流程

将DF的action操作转为RDD操作 以DataSet#head这个action算子为例 1 2 3 4 5 6 org.apache.spark.sql.Dataset#head:2728 org.apache.spark.sql.Dataset#collectFromPlan:3715 org.apache.spark.sql.execution.TakeOrderedAndProjectExec#executeCollect // 这里是调用了SparkPlan子类UnaryExecNode类型的TakeOrderedAndProjectExec重写的executeCollect
阅读更多

Spark源码解析 - Spark SQL处理过程

以Spark 3.2.0版本为基准,分析Spark SQL执行过程 Parsing阶段 Parsing阶段基于ANTLR4实现,用于将SQL解析为Unresolved Logical Plan。具体流程为,在执行SQL查询时,通过SparkSession的sessionState属性,调用sessionState.sqlParser.parsePlan方法进行解析。sqlParser内部实际借助AstBuilder,并采用访问者模式(Visitor Pattern),遍历ANTLR4生成的各类语法树Context节点,将其转换为对应的LogicalPlan节点,最终构建出Unresolved
阅读更多

Spark源码解析 - spark-submit提交过程

以Spark 3.2.0版本为基准,yarn-cluster 模式的 spark application 提交过程如下 Client 提交 AM 到 yarn 过程 通过 spark-submit 提交 spark 任务之后,client 端将 ApplicationMaster 提交到 yarn 的过程如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 org.apache.spark.deploy.SparkSubmit#main:1052 org.apache.spark.deploy.SparkSubmit#doSubmit:1043 org.apac
阅读更多

Hadoop常见问题

hdfs文件系统中的角色 NameNode:是HDFS的主节点,负责管理文件系统的命名空间和元数据信息。维护了整个文件系统的目录树结构以及文件和数据块的映射关系 - 重要组件 - fsimage:它是在NameNode启动时对整个文件系统的快照。NameNode启动的时候,会读取fsimage并跟edit logs合并,得到完整的文件系统快照 - edit logs:它是在NameNode启动后,对文件系统的改动序列。改动会通过edit logs写入文件系统 SecondaryNameNode: - 作用:为了避免edit logs文件越来越大,NameNode重启会花费很长时间,SNN的职责
阅读更多

Spark原理和实践

Spark概念 Spark 是一个基于内存的大数据分布式计算框架 RDD: Partition: Job: Task: Driver: Executor: Spark为什么比MapReduce执行更快 * DAG 执行模型:Spark 将整个计算构建成一个有向无环图(DAG),可对多步算子进行统一调度和优化;MapReduce 则强制每个 Job 都是单一的 Map→Shuffle→Reduce,阶段之间无融合 * 算子融合(Pipelining):对多个窄依赖算子(如 map、filter)进行链式执行,在同一个 Task 中完成,不产生中间写盘;MapReduce 每步都要落盘并重新
阅读更多