Spark SQL介绍

    Spark SQL is Apache Spache Spark’s module for working with structured data.

    • 灵活易用
    • 功能强大
    • 生态丰富
    • Spark演进的基础模块


      Spark SQL 介绍与实战 - 图1

    hadoop与spark接口设计代码复杂度对比
    Spark SQL 介绍与实战 - 图2

    RDDs、SQL、DataFrames 介绍
    Spark SQL 介绍与实战 - 图3

    Spark SQL/任务执行流程
    Spark SQL 介绍与实战 - 图4

    Spark SQL 介绍与实战 - 图5
    Catalyst介绍**
    一个关系型数据执行计划框架及优化器

    • Row & DataType’s
    • Trees & Rules
    • Logical Operators
    • Optimizations

    Spark SQL 介绍与实战 - 图6
    Catalyst介绍:Row & DataType’s

    o.a.s.sql.catalyst.types.DataType

    • Long,Int,Short,Byte,Float,Double,Decimal
    • String,Binary,Boolean,Timestamp
    • Array,Map,Struct

    o.a.s.sql.catalyst.expressions.Row

    • Represents a single row.
    • Can contain coomplex.

    Catalyst介绍:Tree & Rules

    • o.a.s.sql.catalyst.tree.TreeNode
    • 一系列的针对树的转换操作。
      • foreach,map,flatMap,collect
      • transform,transformUp,transformDown
    • 包括operator,tree,expression tree.

    Spark SQL 介绍与实战 - 图7

    • o.a.s.sql.catalyst.rules.Rule
      • 通过Rule将一个执行计划转换成另外一个逻辑等价的执行计划。
    • o.a.s.sql.catalyst.rules.RuleExecutor
      • 一个执行Rule的引擎,根据配置的规则,确定执行rule的顺序,批次,收敛条件等。

    Catalyst介绍:Operators

    • Basic Operators
      • Project,Filter,…
    • Binary Operators
      • Join,Except,Intersect,Union,…
    • Aggregate
    • Generate,Distinct
    • Sort,Limit
    • InsertInto,WriteToFile

    Spark SQL 介绍与实战 - 图8
    Catalyst介绍:Expressions

    • Literal
    • Arithmetics
      • UnaryMinus,Sqrt,Maxof
      • Add,Subtract,Multiply,…
    • Predicates
      • EqualTo,LessThan,LessThanOrEqual,GreaterThan,GreaterThanOrEqual
      • Not,And,Or,In,If,Case When
    • Cast
    • Getltrm,GetField
    • Coalesce,IsNull,IsNotNull
    • StringOperations
      • Like,Upper,Lower,Contains,StartsWith,EndsWith,Substring,…

    Spark SQL 介绍与实战 - 图9

    Catalyst介绍:Optimization
    Spark SQL 介绍与实战 - 图10
    SQL Core**

    • DataFrame/DateSet DSL
    • SQL Analyzer
    • Catalog/Data source
    • 物理执行计划及优化

    Spark SQL 介绍与实战 - 图11

    SQL Core:DataFrame API
    Spark SQL 介绍与实战 - 图12
    SQL Core:Analyzer

    SELECT name,AVG(age) FROM people GROUP BY name;

    • 基于Antlr4的词法解析。

    Spark SQL 介绍与实战 - 图13

    Spark SQL 介绍与实战 - 图14
    SQL Core:Source
    df = sqlContext.read \ .format(“json”) \ .option(“samplingRatio”, “0.1”) \ .load(“/home/user/data.json”) df.write \ .format(“parquet”) \ .mode(“append”) \ .partitionBy(“year”) \ .saveAsTable(“fasterData”)

    Spark SQL 介绍与实战 - 图15
    https://spark.apache.org/docs/latest/sql-data-sources.html

    SQL Core:Physical Plan

    • 由SparkPlanner来对Optimized Logical Plan进行转换,生成Physical Plan
    • 转换Operator到Sparklan。
    • 插入Exchange。
    • 生成执行计划

    Spark SQL 介绍与实战 - 图16

    问题答疑
    能在讲讲RDD和dataframe/date set吗?有点模糊
    不要把RDD看作存放特定数据的数据集,把每个RDD当作我们通过转化操作构建出来的、记录如何计算数据的指令列表
    请问一下刚才说的那个优化,是说把小表可以广播到每个节点,再进行join吗
    是的,大表就不用shuffle了
    请问老师后面讲到阈值大小的问题,把阈值从10M调高到20M的主要目的是什么?
    为了能实现broadcast吧,把小表的限制阈值调大
    演示这个阈值是怎么控制jion策略的
    是本来有一个默认的上限么?
    默认值就是10M,调太大了会oom,和executor内存配置配合调整
    想问下老师,比如需要统计某个时间范围内,客服对用户的消息回复率,用sparksql这块处理是否合适呢,老师可以提供一下大概思路吗
    怎么写mysql,就怎么写sparksql,业务逻辑的表达都是一样的
    dataframe和dataset,这两个区别
    dataframe=dataset[row],始终特殊类型的dataset,专门处理关系型数据,处理的数据有schema信息,所以可以优化执行计划
    explain 通用的吧
    是的,可以加在所有query前面
    能讲一下这四种Broadcast Hash join Shuffle Hash Join Sort-Merge Join Shufffle Nested Loop Join 对应的应用场景吗
    按shuffle类型分为map, shuffle,bucket join.按执行算子可以分为sortmerge, hash, nestedloop,这两种是正交的
    Catalyst 会进行sql的优化,那么是否sql可以不必优化只要表达出想做的的操作就可以么?@李呈祥(司麟)(李呈祥(司麟)) 大佬,能麻烦看看这个问题么?还有就是sparksql既然通过优化以后会转化成RDD去执行计划,是否RDD在处理速度上会更有优势?尤其是面对复杂的逻辑的时候。
    SQL就是个表达是的语言,具体一个SQL怎么变成一个高效的分布式spark任务就是catalyst做的事情。理论上自己基于rdd可以做到最优,但是绝大部分人没有这个水平,不如用sparkSQL,简单高效
    spark 的输出的 INFO信息太多了
    sparkSession.sparkContext.setLogLevel(“warn”) //设置日志级别