sparksql 操作hive_sparksql

sparksql不复杂,只要创建好了DataFrame(泛型为RDD的DataSet),然后通过这个df创建个临时表然后写sql,就能用我们的sqark计算框架做一些我们想要的计算了,而且是只要写sql哦!是不是很好用,只要会sql!就能用!

SqarkSql

历史

hive------>shark-------->sparksql

shark是基于spark计算框架之上的兼容hiveyufa的sql执行引擎。底层计算采用spark所以很快,并且底层依赖hive的解析器和查询优化器,所以完全兼容hive语法,表结构以及UDF函数等。但也正是因为这一点,shark对hive的依赖性太强,无法很好地和spark其他组件集成,于是满足不了需求的shark自然会被淘汰。

详细介绍

sparkl产生的根本原因为了完全脱离hive的限制而产生。两种模式spark on hive 和hive on spark,区分在于谁做sql解析优化。

Spark on Hive: Hive只作为存储角色,Spark负责sql解析优化,执行

Hive on Spark:Hive即作为存储又负责sql的解析优化,Spark负责执行

对比一下
    Hive,是将hive sql转换成MapReduce然后提交到集群中去执行,简化复杂MR代码,执行速度没那么快。
    SparkSql是将sparksql转换成RDD提交到集群中去执行,简化了RDD代码操作,执行效率快(对比MR)。

底层架构

首先拿到sql后解析一批未被解决的逻辑计划,再经过分析得到分析后的逻辑计划,再经过一批优化规则转换成一批最佳优化的逻辑计划,再经过SparkPlanner的策略转化成一批物理计划,随后经过消费模型转换成一个个的Spark任务执行。

sql--(解析器)-->逻辑计划-->优化后的逻辑计划-->物理计划->spark任务(底层RDD)

而优化过程中会涉及到一个谓词下推的概念。

比如说

SELECT t1.name,t2.score FROM t1 JOIN t2 ON (t1.id = t2.id) 
                   WHERE t1.age>50 AND t2.score>90

658acca890dfa81d72d39e77bf8c30a7.png
谓词下推图解

把条件推到最前面,最后join效率高,一开始就join数据量会大一点。

Dataset与DataFrame

底层封装的是RDD,都是分布式数据容器,可以把dataset就看做是一张二维的数据库表一样,里面有字段名,以及字段类型还有数据。而数据结构在这里叫做schema(元信息),数据就是RDD里面的东西咯。

dataFrame是泛型为Row类型的dataSet,即Dataset<Row> = DataFrame。

创建DataSet的几种方式

  1. 读取json格式的文件创建DataSet
  2. 通过json格式的RDD创建DataSet
  3. 通过反射将非json的RDD转换成DataSet
  4. 动态创建schema将非json格式的RDD转换成DataSet
  5. 读取parquet文件创建Dataset
  6. 读取JDBC中的数据创建DataSet
  7. 读取HIVE中的数据创建DataSet

这些在下一篇文章里我把我实验的api代码一起贴上详解~有很多细节注意点要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值