政协网站信息化建设的作用,阿里云网站开发工具,展示设计公司有哪些,江苏天矗建设集团网站Spark SQL优化机制Spark SQLCatalyst 优化器逻辑优化物理优化TungstenUnsafe RowWSCGRDD 缺点 : RDD的算子都是高阶函数 #xff0c;Spark Core 不知函数内的操作#xff0c;只能闭包形式发给 Executors#xff0c; 无法优化
DataFrame 不同点#xff1a;
数据的表示形式…
Spark SQL优化机制Spark SQLCatalyst 优化器逻辑优化物理优化TungstenUnsafe RowWSCGRDD 缺点 : RDD的算子都是高阶函数 Spark Core 不知函数内的操作只能闭包形式发给 Executors 无法优化
DataFrame 不同点
数据的表示形式 有数据模式Data Schema的结构化数据开发算子 一套 DSL算子Domain Specific Language)
Spark 能用 DataFrame 基于启发式的规则或策略动态的运行时信息去优化 DataFrame 的计算过程
Spark SQL
Spark Core 特指 Spark 底层执行引擎Execution Engine包括调度系统、存储系统、内存管理、Shuffle 管理Spark SQL 基于 Spark Core 上有一层独立的优化引 (Optimization Engine)
Spark Core/Spark SQL关系
Spark SQL 优化后的代码交给 Spark Core 执行 Spark SQL 的两个核心组件Catalyst 优化器 /Tungsten
Catalyst 优化器负责创建并优化执行计划有 3 个功能模块创建语法树并生成执行计划、逻辑阶段优化、物理阶段优化Tungsten 负责优化数据结果与可执行代码 衔接 Catalyst 执行计划与底层的 Spark Core 执行引擎 Catalyst 优化器
Catalyst 优化器的作用在逻辑优化阶段基于启发式的规则和策略调整、优化执行计划为物理优化阶段提升性能奠定基础
逻辑优化
Catalyst 的优化过程 : 先用第三方的 SQL 解析器 ANTLR 生成抽象语法树ASTAbstractSyntax Tree
AST 的两个基本元素构成
节点各式各样的操作算子如 : select、filter、agg边 : 记录了数据表的 Schema 信息 如 : 字段名、字段类型
AST 语法树/执行计划(Execution Plan ) Parquet 格式在文件层面支持两项特性 :
谓词下推、列剪枝 都是启发式的规则或策略谓词下推 (Predicates Pushdown) : batchNum 201601的过滤条件在扫描过程时只读取那些满足条件的数据文件列剪枝 (Columns PruningParquet 是列存 (Columns Store) 数据结构只取某个字段名的数据文件时就会剪掉其他数据文件的过程
Spark 只扫描绿色部分 : 逻辑优化的执行计划
执行顺序 : Scan Filter Select变成 Filter Select Scan 物理优化
Catalyst 的优化阶段差异
逻辑阶段 依赖先验的启发式经验 基于经验优化物理阶段依赖各式各样的统计信息如数据表尺寸、是否启用数据缓存、Shuffle 中间文件 基于数据优化
Join 节点物理阶段优化
采用哪种实现机制实现关联嵌套循环连接NLJNested Loop Join、排序归并连接Sort Merge Join、哈希连接Hash Join采用哪种数据分发实现关联Shuffle Join 和 Broadcast Join根据两张表的存储大小决定采用 运行稳定但性能略差的 Shuffle Sort Merge Join 或 执行性能更佳的 Broadcast Hash Join
Tungsten
基于Catalyst Tungsten 在数据结构/执行代码进行进一步的优化
数据结构优化 Unsafe Row 的设计与实现执行代码优化全阶段代码生成WSCGWhole Stage Code Generation
Unsafe Row
Spark SQL 默认采用 org.apache.spark.sql.Row 对象对每条数据进行封装和存储Java Object 会有大量的存储开销
Unsafe Row 是二进制数据结构以字节数组的格式存储每条数据能减少存储开销
采用默认的 Row存储
每条记录需要消耗至少 60 个字节 采用 Tungsten Unsafe Row 存储
每条数据记录仅需消耗十几个字节 WSCG
WSCG全阶段代码生成
全阶段调度系统中的 Stage代码生成运行时把链式调用的算子合成一份代码。如把 Filter、Select、Scan 合成一个函数
绿色节点属于同一个 Stage