赞
踩
RDD 缺点 : RDD的算子都是高阶函数 ,Spark Core 不知函数内的操作,只能闭包形式发给 Executors, 无法优化
DataFrame 不同点:
Spark 能用 DataFrame ,基于启发式的规则或策略,动态的运行时信息,去优化 DataFrame 的计算过程
Spark Core/Spark SQL关系:
Spark SQL 的两个核心组件:Catalyst 优化器 /Tungsten
Catalyst 优化器的作用:在逻辑优化阶段,基于启发式的规则和策略调整、优化执行计划,为物理优化阶段提升性能奠定基础
Catalyst 的优化过程 : 先用第三方的 SQL 解析器 ANTLR 生成抽象语法树(AST,AbstractSyntax Tree)
AST 的两个基本元素构成
AST 语法树/执行计划(Execution Plan ) :
Parquet 格式在文件层面支持两项特性 :
batchNum >= 201601
的过滤条件,在扫描过程时,只读取那些满足条件的数据文件Spark 只扫描绿色部分 :
逻辑优化的执行计划 :
Scan > Filter > Select
变成 Filter > Select > Scan
Catalyst 的优化阶段差异:
Join 节点物理阶段优化:
基于Catalyst ,Tungsten 在数据结构/执行代码进行进一步的优化
Spark SQL 默认采用 org.apache.spark.sql.Row
对象对每条数据进行封装和存储,Java Object 会有大量的存储开销
Unsafe Row 是二进制数据结构,以字节数组的格式存储每条数据,能减少存储开销
采用默认的 Row存储:
采用 Tungsten Unsafe Row 存储:
WSCG:全阶段代码生成
Filter、Select、Scan
合成一个函数绿色节点属于同一个 Stage :
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。