漫谈「 spark sql 」出现的前世今生

495 阅读3分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

(纯作者个人的认知,如有不足,欢迎指正)

1.什么是spark sql?

image.png   SQL: 简单提及,sql即结构化查询语言,分为 DDL,DML,DCL,DQL,即定义,管理,控制(权限),查询。可用来查询结构化数据,或者说结构化数据(因为结构化数据一般存储于关系型数据库)支持sql操作。

  spark sql: 支持sql操作的spark ,其中对sql支持的实现。

  表简单来说就是对结构化数据和文件的抽象描述。文件系统发展,出现了数据库系统,数据库系统中有关系型数据库,关系型数据库中有对模式的定义,然后有了表的概念等。

2.先来说说hive mapreduce

image.png

声明:元数据当然不止可以用mysql来存储持久化,还可以用其他,但是普遍来说用mysql的比较多,这里就用mysql来例举解释。

术语:
  cli 指代 命令行接口(即hive启动的可输入命令端)
  driver 指代 hive中的一个角色,可理解为驱动
  metastore 指代 hive中的元数据管理
  元数据 可认为是对数据和数据结构的描述,比如mysql中对一张表的所有定义数据就是元数据

  通过命令行接口可输入sql命令,sql命令被hive解析、优化、执行,执行时通过元数据管理寻找对应sql关键字元数据,元数据管理是将所有元数据存储在mysql中,此时,元数据管理通过mysql获取到所需元数据,若没有,则直接中断执行,通过cli提示完结,若查到对应元数据,符合sql语句,则将sql转为mapreduce程序,请求yarn获取资源,获取到资源后,发送mapreduce程序进行执行,执行后的结果可存储在hbase,也可存储在hdfs上,hbase基于hdfs做存储层,最后返回执行结果,展示在cli窗口上。(这是早期的hive——sql)

3.hive操作可将mapreduce替换为spark

image.png

  当map reduce暴露的问题越来越多时,出现了spark,优化了很多mapreduce的一些不足,这时候,当然需要支持接入hive,sql转为spark程序执行了,于是就有了上图的技术组合。但是spark是RDD数据模型,hive做的许多sql优化,其实在spark执行层面上是做不到更深程度的优化的,当然,hive的改动,相应的spark也要做对应调整,这时候就又暴露出来许多问题。

4.spark支持sql的阶段

image.png

  最终spark出了spark sql直接支持 sql转spark程序执行,这时候它的sql优化可以做到更深程度的优化,但是元数据管理依然使用hive的metastore,当然也有解耦层catalog,它是对元数据的再一次抽层,可以是临时的元数据管理。
  spark sql的底层仍是调用了spark core的api,它的原生算子等,实现了sql转spark程序的执行。