Spark SQL介绍
属于Spark框架中的一个模块
相当于Hive框架(提供SQL,使用户不需要编写MapReduce程序),功能远远大于Hive
Hive 2.x版本,底层推荐使用Spark
美团,JD,饿了么,链家等一些大型公司都在使用SparkSql进行数据分析
Spark SQL是什么
(1)最初的功能
取代Hive框架,提供SQL语句,将SQL语句转成SparkCore程序,提交运行
前世今生:
hive ->shark(spark on hive )->sparkSQL(重写依赖Hive的代码)
shark0.9版本,shark框架太依赖于Hive框架,就是将Hive框架源码拿过去修改了部分代码(将以前SQL转成MapReduce代码改成 将SQL转成SparkCore的代码)
如果Hive升级了,shark要升级
如果spark升级了,shark也要升级
(2)sparkSQL的快速发展
sparkSQL(1.0)
| schemaRDD
sparkSQL(1.3)
| dataFrame
sparkSQL(1.6)
| dataset
sparkSQL(2.0)
DateSet和DataFrame进行合并
DateSet[Row] = DataFrame
(3)数据结构
对要分析的数据进行封装,封装到集合中(一直在变化)
DataFrame/DataSet == RDD + schema(字段类型和字段名称)
RDD[Person] +schema = DataFrame[name:String , age:Int , id:long]
(4)提供2中分析语句
(a)SQL
99%与Hive一样,将数据放到Table,使用SQL语句查询分析
(b)DSL (domain specific)
调用DateSet集合类中的函数进行分析(类似RDD)
(5)SparkSQL是如何读取数据
2.0版本之前
SQLContext(底层sparkContext) ->sqlContext
sqlContext. jdbc()/csv()/table/parquet()
2.0版本之后
SparkSession ->spark
spark.read.jdbc()/csv()/table/parquet()
spark编程:优化点
spark SQL 中产生shuffle的时候,RDD的默认分区数据为200
依据实际的数据量进行合理的设置
.config(“spark.sql.shuffle.partitions”,2)
将DataSet/DataFrame保存到外部存储系统中
设置SaveMode,默认值:存在即报错
以及实际需求进行合理设置
可以设置为Append,或者OverWrite
Saprk SQL与Hive的集成
初衷就是处理Hive表中的数据,与Hive有天然的集成关系
database/table/column/type ->元数据,存储在metaStore
本质
sparkSQL处理Hive表中的数据,其实就是读取MetaStore存储的元数据
实际项目开发中,
hive框架来讲,将启动Hive Remote MetaStore服务
具体的操作:
(1)启动metaStore服务
(2)告知metaStore服务在哪里