Spark原理与实践|青训营

95 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天。

Spark介绍

  • 处理大规模批数据的计算引擎、基于内存、是MR的优化
  • 支持单机与集群、支持批(2.0后支持流处理)
  • 支持通过SparkSQL查询DB数据,提供了丰富的API
  • Spark中Task以线程Thread方式运行,线程Thread运行在进程Process中,启动和销毁相对于进程更快

SparkCore原理

  • RDD(Resilient Distributed Dataset):一种分布式内存抽象,用于在大规模集群中做内存计算,是Spark的核心数据结构,Spark API的操作依赖RDD。将要处理的数据封装到RDD中,调用RDD中的函数处理数据。RDD数据可以放到内存中,内存不足可以持久化到磁盘中。
  • RDD算子
    • Transform算子:生成一个新的RDD
      • Map,filter,groupBy,join, union,reduce,sort,partitionBy
    • Action算子:触发Job提交,形成DAG图提交给Spark集群运行得到结果。
      • count,collect,take,save, show
  • RDD依赖
    • 窄依赖:父RDD的每个partition至多对应一个子RDD分区。
    • 宽依赖:父RDD的每个partition都可能对应多个子RDD分区。
  • TaskSchduler(任务调度器):根据调度算法(FIFO/FAIR)对多个TaskSet进行调度,将Task调度(locality)到相关Executor上面执行,
  • Executor内存主要有两类: Storage、Execution

SparkSQL

  • Spark SQL作为分布式SQL查询引擎,提供了一个最核心数据抽象DataFrame。
  • Spark SQL是将 SQL转换成一个job,提交到Spark集群上运行,类似Hive,兼容 Hive。
  • Spark SQL的核心是Catalyst查询,将SQL/Dataset/DataFrame经过一系列操作转化为Spark系统中执行的RDD。
  • Spark SQL的两种优化器
    • 基于规则的优化器(Rule-Based Optimization,RBO):根据指定的规则规范SQL的编写,使job不受DB中数据的内容影响。
    • 基于代价的优化器(Cost-Based Optimization,CBO):对关系表达式进行转换,根据物理执行计划选最优。
  • Spark 3.0新增自适应查询执行框架(AQE):可在运行时基于精确的运行时统计信息,通过修改Spark plan来优化。