【大数据】【Spark】SparkSQL

一 前言

1.hive

可以跑在spark或者mapreduce上面,hive on spark和sparkSQL并非一个概念,它们俩SQL引擎不同,但是计算引擎都是spark,hive和sparkSQL都不负责计算。

2.shark到sparkSQL

hive跑在spark上面 ,shark缺点:hive hql解析,逻辑执行计划生成依赖于hive的,仅仅把物理执行从mr改成spark。而且spark是基于线程的,所以会有线程安全问题。
shark 终止以后,产生了两个分支:

  • hive on spark hive社区,源码在hive中,Hive On Spark比SparkSQL稍晚。Hive原本是没有很好支持MapReduce之外的引擎的,而Hive On Tez项目让Hive得以支持和Spark近似的Planning结构(非MapReduce的DAG)。
  • SparkSQL spark社区,源码在spark中,sparkSQL减轻了依赖,支持多种数据源,多种优化技术,扩展性好很多。
3.SQL on hadoop常用框架

这里就说俩:

  • ⑴ hive 用的最多的,将sql转化成mapreduce或者spark,
  • ⑵ spark SQL sql dataframe/dataset api进行编程,还能够访问hdfs和rdbms,json,hbase,mangodb等都能够访问

二 dataframe 和 dataset

Spark每个模块都有一个核心抽象,Spark-core的核心抽象是RDD,Spark SQL等都基于RDD封装了自己的抽象,在Spark SQL中是DataFrame/DataSet。相对来说RDD是更偏底层的抽象,DataFrame/DataSet最后都是转换成RDD运行。从功能上来说,DataFrame/DataSet能做的事情RDD都能做,RDD能做的事情DataFrame/DataSet不一定能做。

1.dataframe

是由列组成的数据集,它更像是一张表。它跟hive很类似。dataframe api层次更高。.可以由结构化数据文件(json等),hive表,外部数据库和RDD作为源进行构建

2.dataset

而dataset引入的encode,可以实现按需访问数据,不需要序列化整个对象
dataset是特定域对象中的强类型集合,它可以使用函数或者相关操作并行地进行转换等操作,数据集可以由JVM对象构造,然后使用函数转换(map、flatmap、filter等)进行操作。Dataset 支持Scala和javaAPI,不支持Python API。

3.dataframe和dataset的不同

Dataset可以认为是DataFrame的一个特例,主要区别是Dataset每一个record存储的是一个强类型值而不是一个Row。因此具有如下三个特点:

  • DataSet可以在编译时检查类型
  • DataSet是面向对象的编程接口
  • 后面版本DataFrame会继承DataSet,DataFrame是面向Spark SQL的接口

4. DF/DS和RDD的联系

DataFrame和Dataset实质上都是一个逻辑计划,并且是懒加载的,都包含着scahema信息,只有到数据要读取的时候,才会将逻辑计划进行分析和优化,并最终转化为RDD。

你可能感兴趣的:(hadoop)