`
baishuo491
  • 浏览: 78313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

spark源码分析:catalyst 草稿

 
阅读更多
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 标记法
分享到:
评论

相关推荐

    Spark源码剖析

    4. Spark SQL源码剖析:Spark SQL是Spark用来处理结构化数据的组件,包括Hive支持、Spark DataFrame和Dataset API等。这部分内容可能会分析Spark SQL的内核,包括Catalyst查询优化器和Tungsten执行引擎。 5. Spark...

    spark sql解析-源码分析

    9. **内存管理和资源调度**:Spark SQL在Spark集群上运行,它利用Spark的内存管理模型和DAG Scheduler进行任务调度,确保数据在内存中高效存储和处理,避免频繁的磁盘I/O。 10. **跨语言支持**:Spark SQL提供了...

    Spark编程基础:Spark SQL单元测验与答案.docx

    Spark 编程基础:Spark SQL 单元测验与答案 Spark SQL 是 Apache Spark 中的一个模块,旨在提供高效、灵活的数据处理能力。下面是 Spark 编程基础的知识点总结: 一、Spark SQL 的架构 * Spark SQL 的架构基于 ...

    spark 源码解读迷你书

    这部分可能涉及DataFrame的优化、Catalyst查询优化器以及JDBC/ODBC连接的源码分析。 10. **机器学习库MLlib**:如果深入,书籍也可能会涵盖Spark的机器学习库MLlib的源码,讲解算法实现和并行化的策略。 通过这...

    Spark编程基础:Spark SQL单元测验与答案.pdf

    Spark 编程基础知识点总结 ...* 可扩展:Spark SQL 可以与其他 Spark 组件集成,实现了数据处理和分析的一体化。 Spark SQL 是一个功能强大且高效的数据处理引擎,广泛应用于大数据处理、数据分析、机器学习等领域。

    大数据Spark源码

    源码分析可以了解DataFrame如何与RDD互操作,以及 Catalyst优化器的工作原理。 总结,Spark源码的学习是一个深入理解大数据处理流程和技术细节的过程。通过源码,我们可以了解到Spark如何高效地调度任务,如何处理...

    Spark SQL 2.3.0:深入浅出

    这个过程的核心是由Catalyst完成的,Catalyst是Spark SQL的查询优化器,负责转换和优化执行计划。一旦逻辑执行计划优化完成,就会交给Spark引擎(Spark Engine)来执行具体的作业。 DataFrame是Spark SQL的一个重要...

    Spark SQL源码概览.pdf

    Spark SQL 包含 3 个子项目:Core、Catalyst、Hive。其中 Catalyst 是核心的查询优化引 擎,独立于 Spark 平台;Spark SQL Core 封装 Catalyst,向应用程序提供 SparkSession、Dataset、 DataFrame 等 API...

    Spark SQL源码概览.zip

    本资料“Spark SQL源码概览.zip”包含了一份详细的Spark SQL源码分析,主要面向Java开发人员,旨在帮助他们深入理解Spark SQL的内部工作机制。以下是基于该主题的详细知识点: 1. **Spark SQL架构**: Spark SQL的...

    SparkSQL通过Hive创建DataFrame

    Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'stu' not found in database 'default'; 分析:确实没有临时表View,并且没有开启Hive支持 解决:开启Hive支持 val ...

    Cisco现场手册:Catalyst交换机配置 中文

    本书是一本关于在Cisco Catalyst交换机上进行配置的内容全面的参考书。全书共分为14章,分别介绍了配置基础、2层配置、3层配置、VLAN和trunking(链路聚集)技术、STP协议、3层交换技术、组播、服务器端负载均衡、...

    《[Cisco现场手册:Catalyst交换机配置(中文)]》 [PDF]

    这是“Cisco现场手册”系列图书的第二部,它着眼于介绍Cisco Catalyst系列的交换机产品。在有关Cisco Catalyst交换机的诸多信息和文档原始资料中,几乎没有以网络专业人员随身携带、快速参考的形式出现的资料。 ...

    spark2.2.0源码------

    2. **SQL改进**:Spark SQL在2.2.0中得到了显著的增强,包括对标准SQL的更全面支持,如窗口函数、JSON查询以及时间序列分析等。此外,性能也得到了优化,例如通过Catalyst优化器改进了查询计划。 3. **机器学习库...

    藏经阁-Deep Dive Into Catalyst Apache Spark 2.0's Optimizer.pdf

    Apache Spark 2.0 的 Catalyst 优化器深入剖析 Apache Spark 2.0 的 Catalyst 优化器是 Apache Spark 2.0 版本中的一项关键技术,负责优化 Spark 应用程序的执行效率。下面我们将深入剖析 Catalyst 优化器的工作...

    catalyst-docs:Catalyst算法交易库的文档

    6. **可视化**:Catalyst 也提供了数据可视化工具,你可以通过图表来直观地分析策略的表现和市场的变化。 7. **社区支持**:Catalyst 社区活跃,有许多用户分享他们的策略和经验,你可以从中学习并得到问题的解答。...

    spark2.3源码下载

    Spark主要由四大组件构成:Spark Core、Spark SQL、Spark Streaming和MLlib。Spark Core是基础,提供分布式任务调度和内存管理;Spark SQL负责处理SQL查询和数据处理,支持Hive等传统SQL系统;Spark Streaming处理...

    Spark2.6.3源码

    在分析源码时,开发者通常会关注以下几个方面: - **设计模式**:Spark广泛使用了函数式编程和面向对象设计模式,如Actor模型、模式匹配、闭包等。 - **性能优化**:包括内存管理、序列化、并行化等,以提高计算...

    Catalyst 5.8- the Perl MVC Framework

    2. **安装 Catalyst**:通过 CPAN 或者 CPANM 安装 Catalyst,例如使用 CPANM 命令:`cpanm Catalyst::Runtime`。 3. **创建 Catalyst 项目**:使用 `catalyst` 命令行工具创建一个新的 Catalyst 项目:`catalyst ...

    最近看了关于perl catalyst的不错翻译,上传上来大家一起学学

    8. **插件机制**:Catalyst有丰富的插件库,可以扩展其功能,如Catalyst::Plugin::Authentication用于身份验证,Catalyst::Plugin::Session用于会话管理。 9. **部署与性能优化**:学习如何将Catalyst应用部署到...

    catalyst:Catalyst是用于在复杂应用程序中开发组件的一组模式和技术

    **Catalyst 框架详解** Catalyst 是一个专为构建复杂应用程序设计的组件化开发框架。它采用了一组模式和技术,旨在简化大型应用的构建过程,提高代码的可维护性和复用性。核心理念是将应用程序分解为独立、可重用的...

Global site tag (gtag.js) - Google Analytics