Shark与SparkSQL

首先介绍一下Shark的概念

Shark简单的说就是Spark上的Hive,其底层依赖于Hive引擎的

但是在Spark平台上,Shark的解析速度是Hive的几多倍

它就是Hive在Spark上的体现,并且是升级版,一个强大的数据仓库,并且是兼容Hive语法的

下面给出一张来自网上的Shark构架图

从图上可以看出,Spark的最底层大部分还是基于HDFS的,Shark中的数据信息等也是对应着HDFS上的文件

从图中绿色格子中可以看到,在Shark的整个构架中HiveQL的引擎还是占据着底层不可分割的部分,而Meta store的制度是Hive的根本,对Shark的重要性自然不言而喻

Shark中创建一张外部分区表的代码格式如下:

create [external] table [if not exists] table_name(col_name data_type,…)

[partitioned by (col_name data_type,…)]

[row format row_format]

[fields terminated by ‘\t’]

[lines terminated by ‘\n’]

[stored as file_format]

[location hdfs_path]

基本和Hive的格式没有什么差别

在Shark中还有一种高效的表,叫做缓存表

创建缓存表的方式如下:

create table xx_cached as select …

只要在表名的最后加上_cached即可

缓存表顾名思义,将查询到的数据生成表存储在缓存中,再次查询的时候速度将是几何提升的

Shark的用法:

在Spark的bin目录下使用shark脚本进入客户端程序

shark -f 要执行的.sql文件位置

执行完后可以就生成对应的表,可以再客户端中使用SQL语句进行查询

但是…

对比起Hive,如此好用性能又好的Shark

在Spark1.0版本开始,Shark被官方抛弃了…

Why?

原因就是Shark太过依赖于Hive了,导致执行任务的时候不能灵活的添加新的优化策略

于是Spark团队决定从头开发一套完全脱离Hive,基于Spark平台的数据仓库框架

于是SparkSQL诞生了

相对于Shark,SparkSQL有什么优势呢?

第一,也是根本SparkSQL产生的根本原因,其完全脱离了Hive的限制

第二,SparkSQL支持查询原生的RDD,这点就极为关键了。RDD是Spark平台的核心概念,是Spark能够高效的处理大数据的各种场景的基础

第三,能够在Scala中写SQL语句。支持简单的SQL语法检查,能够在Scala中写Hive语句访问Hive数据,并将结果取回作为RDD使用

第四,Catalyst。Catalyst能够帮助用户优化查询,即使用户的水平不高,写不出高效率的代码,Catalyst也能够进行一定程度的性能优化

简简单单的从以上几点就可以看出,SparkSQL和Shark相比,在性能和可用性方面肯定提升了几个等级

下面给出一张网上的SparkSQL构架图:

可以明显的看到,在Shark中出于底层关键地位的Hive变成了顶层可变的程序模块

并且SparkSQL还支持JDBC/ODBC等数据库接口和JSON格式的数据,可谓是一个万金油

文章的最后给出一段SparkSQL的实例代码(Scala语言):

val sc:SparkContext //定义一个SparkContext类型的常量sc,SparkContext是Spark中提交作业的唯一通道
val sqlContext = new SqlContext(sc)//根据sc new一个SqlContext对象,该对象是处理SparkSQL的
import sqlContext._ //引入sqlContext中的所有方法,这些方法是处理SQL语句的基础
case class Person(name:String,age:String)//定义一个Person类
val people:RDD[Person] = sc.textFile("people.txt").map(_.split(",")).map(p => Person(p(0),p(1).toInt))//定义一个RDD数组,类型为Person,从people.txt文件中读取数据生成RDD,根据,进行split之后进行map操作,将每一行记录都生成对应的Person对象
people.registerAsTable("people")//将得到的RDD数组注册为表“people”
val teenagers = sql("select name from people where age >= 10 && age <= 19")//定义要执行的sql语句
teenagers.map(t => "Name:" + t(0)).collect().foreach(println)//循环打印出teenagers中的每个对象的名字
时间: 2024-10-05 22:36:39

Shark与SparkSQL的相关文章

spark视频-第二期:Shark、SparkSQL

第2期Spark亚太研究院决胜云计算大数据时代:100期Spark公益大讲堂之Shark.SparkSQL,视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=277083257568965 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.And

Spark视频第2期:Shark、SparkSQL

Spark视频第2期:Shark.SparkSQL地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=277083257568965 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰富的源码.实务和性能优化经验.彻底研究了Sp

Spark视频 王家林 Spark公开课大讲坛第二期: Spark的Shark和SparkSQL

王家林 Spark公开课大讲坛第一期:Spark把云计算大数据速度提高100倍以上 http://edu.51cto.com/lesson/id-30816.html Spark实战高手之路 系列书籍  http://down.51cto.com/tag-Spark%E6%95%99%E7%A8%8B.html 王家林老师(邮箱[email protected] 电话18610086859) 中国目前唯一的移动互联网和云计算大数据集大成者: 云计算大数据Spark亚太研究院院长和首席专家: Sp

sparkSQL1.1入门之一:为什么sparkSQL

2014年9月11日,Spark1.1.0忽然之间发布.笔者立即下载.编译.部署了Spark1.1.0.关于Spark1.1的编译和部署,请参看笔者博客Spark1.1.0 源码编译和部署包生成 . Spark1.1.0中变化较大是sparkSQL和MLlib,sparkSQL1.1.0主要的变动有: 增加了JDBC/ODBC Server(ThriftServer),用户可以在应用程序中连接到SparkSQL并使用其中的表和缓存表. 增加了对JSON文件的支持 增加了对parquet文件的本地

Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-Hadoop工具.但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,大量的

spark记录(13)SparkSQL

1.Shark Shark是基于Spark计算框架之上且兼容Hive语法的SQL执行引擎,由于底层的计算采用了Spark,性能比MapReduce的Hive普遍快2倍以上,当数据全部load在内存的话,将快10倍以上,因此Shark可以作为交互式查询应用服务来使用.除了基于Spark的特性外,Shark是完全兼容Hive的语法,表结构以及UDF函数等,已有的HiveSql可以直接进行迁移至Shark上Shark底层依赖于Hive的解析器,查询优化器,但正是由于SHark的整体设计架构对Hive的

大数据-spark理论(3)sparkSql,sparkStreaming,spark调优

导读目录 第一节:sparksql 1:简介 2:核心 3:与hive整合 4:dataFrame 5:函数 第二节:spark Streaming 1:对比strom 2:DStream的算子 3:代码 4:driver HA 5:读取数据 第三节:spark调优 第一节:sparksql (1)简介: Shark:shark是sparksql的前身,hive是shark的前身 快的原因:不仅是内存,还有谓词下移(减少一定量的数据IO) 正常 谓词下移 (先关联表在切割) (先将表中的字段过滤

Spark从入门到上手实战

Spark从入门到上手实战 课程学习地址:http://www.xuetuwuyou.com/course/186 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:轩宇老师 课程简介: Spark属于新起的基于内存处理海量数据的框架,由于其快速被众公司所青睐.Spark 生态栈框架,非常的强大,可以对数据进行批处理.流式处理.SQL 交互式处理及机器学习和Graphx 图像计算.目前绝大数公司都使用,主要在于 Spark SQL 结构化数据的处理,非常的快速,高性能

Spark入门实战系列--1.Spark及其生态圈简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL.Spark St