object Optimizer extends RuleExecutor[LogicalPlan] {
val batches =
Batch("ConstantFolding", Once,
ConstantFolding,
BooleanSimplification,
SimplifyFilters,
SimplifyCasts) ::
Batch("Filter Pushdown", Once,
CombineFilters,
PushPredicateThroughProject,
PushPredicateThroughInnerJoin,
ColumnPruning) :: Nil
}
SimplifyFilters
object SimplifyFilters extends Rule[LogicalPlan] {
def apply(plan: LogicalPlan): LogicalPlan = plan transform {
case Filter(Literal(true, BooleanType), child) =>
child
case Filter(Literal(null, _), child) =>
LocalRelation(child.output)
case Filter(Literal(false, BooleanType), child) =>
LocalRelation(child.output)
}
}
起到削减一些逻辑判断,直接返回child或者child.output的作用,那么这些Literal(true, BooleanType)之类的模式是从哪里来的呢?查看Optimizer 的batches 可以发现,是SimplifyFilters前面的batch:BooleanSimplification,在这里面形成的
SQLContext.createSchemaRDD(RDD<A>, TypeTag<A>) line: 90
BaiJoin$.main(String[]) line: 26
BaiJoin.main(String[]) line: not available
看这句:SQLContext.createSchemaRDD(RDD<A>, TypeTag<A>)
当时的断点停在new SchemaRDD这一句:
implicit def createSchemaRDD[A <: Product: TypeTag](rdd: RDD[A]) =
new SchemaRDD(this, SparkLogicalPlan(ExistingRdd.fromProductRdd(rdd)))
当时的varible界面里有这样一个变量:evidence$1 TypeTags$TypeTagImpl<T> (id=107)
它的值是 TypeTag[com.ailk.test.sql.tb],所以可以近似认为:A就是com.ailk.test.sql.tb(一个case class类型)
rdd则是:MappedRDD[2] at map at BaiJoin.scala:16
MappedRDD[1] at textFile at BaiJoin.scala:16
HadoopRDD[0] at textFile at BaiJoin.scala:16
def fromProductRdd[A <: Product : TypeTag](productRdd: RDD[A]) = {
ExistingRdd(ScalaReflection.attributesFor[A], productToRowRdd(productRdd))
}
把A里面,所有的item都取出来,成为一个列表,就是com.ailk.test.sql.tb定义的所有列
可见ScalaReflection.attributesFor[A]的结果是一个Seq[Attribute],它的excute就是返回一个RDD[Row]
case class ExistingRdd(output: Seq[Attribute], rdd: RDD[Row]) extends LeafNode {
override def execute() = rdd
}
输入是RDD[A],输出是RDD[Row]
def productToRowRdd[A <: Product](data: RDD[A]): RDD[Row] = {
data.mapPartitions { iterator =>
if (iterator.isEmpty) {
Iterator.empty
} else {
val bufferedIterator = iterator.buffered
val mutableRow = new GenericMutableRow(bufferedIterator.head.productArity)
bufferedIterator.map { r =>
var i = 0
while (i < mutableRow.length) {
mutableRow(i) = r.productElement(i)
i += 1
}
mutableRow
}
}
}
}
/////////////////////////////////////////////////////////////////////
heap jit-Compiler gc
dfs3
申请内存的操作必须是原子操作 线程的模式:tlab--为每个线程来 freeList Bumpthepointer
复制算法
s0和s1复制的是eden中存活的对象
标记清除算法---内存碎片
标记压缩算法----内存拷贝比较严重
root的选择:class thread stacklocal jnilocal monitor “held by jvm”
dfs3 标记法
分享到:
相关推荐
4. Spark SQL源码剖析:Spark SQL是Spark用来处理结构化数据的组件,包括Hive支持、Spark DataFrame和Dataset API等。这部分内容可能会分析Spark SQL的内核,包括Catalyst查询优化器和Tungsten执行引擎。 5. Spark...
9. **内存管理和资源调度**:Spark SQL在Spark集群上运行,它利用Spark的内存管理模型和DAG Scheduler进行任务调度,确保数据在内存中高效存储和处理,避免频繁的磁盘I/O。 10. **跨语言支持**:Spark SQL提供了...
Spark 编程基础:Spark SQL 单元测验与答案 Spark SQL 是 Apache Spark 中的一个模块,旨在提供高效、灵活的数据处理能力。下面是 Spark 编程基础的知识点总结: 一、Spark SQL 的架构 * Spark SQL 的架构基于 ...
这部分可能涉及DataFrame的优化、Catalyst查询优化器以及JDBC/ODBC连接的源码分析。 10. **机器学习库MLlib**:如果深入,书籍也可能会涵盖Spark的机器学习库MLlib的源码,讲解算法实现和并行化的策略。 通过这...
Spark 编程基础知识点总结 ...* 可扩展:Spark SQL 可以与其他 Spark 组件集成,实现了数据处理和分析的一体化。 Spark SQL 是一个功能强大且高效的数据处理引擎,广泛应用于大数据处理、数据分析、机器学习等领域。
源码分析可以了解DataFrame如何与RDD互操作,以及 Catalyst优化器的工作原理。 总结,Spark源码的学习是一个深入理解大数据处理流程和技术细节的过程。通过源码,我们可以了解到Spark如何高效地调度任务,如何处理...
这个过程的核心是由Catalyst完成的,Catalyst是Spark SQL的查询优化器,负责转换和优化执行计划。一旦逻辑执行计划优化完成,就会交给Spark引擎(Spark Engine)来执行具体的作业。 DataFrame是Spark SQL的一个重要...
Spark SQL 包含 3 个子项目:Core、Catalyst、Hive。其中 Catalyst 是核心的查询优化引 擎,独立于 Spark 平台;Spark SQL Core 封装 Catalyst,向应用程序提供 SparkSession、Dataset、 DataFrame 等 API...
本资料“Spark SQL源码概览.zip”包含了一份详细的Spark SQL源码分析,主要面向Java开发人员,旨在帮助他们深入理解Spark SQL的内部工作机制。以下是基于该主题的详细知识点: 1. **Spark SQL架构**: Spark SQL的...
Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'stu' not found in database 'default'; 分析:确实没有临时表View,并且没有开启Hive支持 解决:开启Hive支持 val ...
本书是一本关于在Cisco Catalyst交换机上进行配置的内容全面的参考书。全书共分为14章,分别介绍了配置基础、2层配置、3层配置、VLAN和trunking(链路聚集)技术、STP协议、3层交换技术、组播、服务器端负载均衡、...
这是“Cisco现场手册”系列图书的第二部,它着眼于介绍Cisco Catalyst系列的交换机产品。在有关Cisco Catalyst交换机的诸多信息和文档原始资料中,几乎没有以网络专业人员随身携带、快速参考的形式出现的资料。 ...
2. **SQL改进**:Spark SQL在2.2.0中得到了显著的增强,包括对标准SQL的更全面支持,如窗口函数、JSON查询以及时间序列分析等。此外,性能也得到了优化,例如通过Catalyst优化器改进了查询计划。 3. **机器学习库...
Apache Spark 2.0 的 Catalyst 优化器深入剖析 Apache Spark 2.0 的 Catalyst 优化器是 Apache Spark 2.0 版本中的一项关键技术,负责优化 Spark 应用程序的执行效率。下面我们将深入剖析 Catalyst 优化器的工作...
6. **可视化**:Catalyst 也提供了数据可视化工具,你可以通过图表来直观地分析策略的表现和市场的变化。 7. **社区支持**:Catalyst 社区活跃,有许多用户分享他们的策略和经验,你可以从中学习并得到问题的解答。...
Spark主要由四大组件构成:Spark Core、Spark SQL、Spark Streaming和MLlib。Spark Core是基础,提供分布式任务调度和内存管理;Spark SQL负责处理SQL查询和数据处理,支持Hive等传统SQL系统;Spark Streaming处理...
在分析源码时,开发者通常会关注以下几个方面: - **设计模式**:Spark广泛使用了函数式编程和面向对象设计模式,如Actor模型、模式匹配、闭包等。 - **性能优化**:包括内存管理、序列化、并行化等,以提高计算...
2. **安装 Catalyst**:通过 CPAN 或者 CPANM 安装 Catalyst,例如使用 CPANM 命令:`cpanm Catalyst::Runtime`。 3. **创建 Catalyst 项目**:使用 `catalyst` 命令行工具创建一个新的 Catalyst 项目:`catalyst ...
8. **插件机制**:Catalyst有丰富的插件库,可以扩展其功能,如Catalyst::Plugin::Authentication用于身份验证,Catalyst::Plugin::Session用于会话管理。 9. **部署与性能优化**:学习如何将Catalyst应用部署到...
**Catalyst 框架详解** Catalyst 是一个专为构建复杂应用程序设计的组件化开发框架。它采用了一组模式和技术,旨在简化大型应用的构建过程,提高代码的可维护性和复用性。核心理念是将应用程序分解为独立、可重用的...