SlideShare a Scribd company logo
Spark SQL
江宇
Outline
• 概述
• 使⽤用⽅方法
• 使⽤用案例
• WebUI
• 已知的问题
• Q&A
概述
• Hive、Shark and Spark SQL
概述
• Spark SQL使⽤用户进⾏行关系数据查询,降低学习成
本
• 底层封装对DataFrames的操作(1.3+)
• DataFrames能够通过现有RDD,json格式⽂文件,
Parquet⽂文件和Hive查询构建
使⽤用⽅方法
• 1、Spark-shell提交
(1)提交命令:bin/spark-shell --master yarn --num-executors 10 --
driver-memory 2g --executor-memory 2g --executor-cores 1
(2)⼊入⼝口点是sqlContext或其⼦子类如HiveContext
scala> import org.apache.spark.sql.hive.HiveContext
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
(3)基于sqlContext查询
scala> sqlContext.sql("select * from **** where dt='20140909' limit 10").collect().foreach(println)
使⽤用⽅方法
• 2、Spark-submit提交
(1)IDE安装scala插件,新建项⺫⽬目,maven加⼊入spark
依赖
(2)编写程序
(3)打包和提交:提交⽅方式
spark-submit --master yarn  --num-executors 10 --driver-memory 2g --executor-
memory 2g --executor-cores 1 --class org.apache.spark.examples.
SparkSqlTest sparkSqlTest.jar
使⽤用⽅方法
• 3、spark-sql命令
(1)提交命令:bin/spark-sql --master yarn --num-executors 200 --driver-memory
2g --executor-memory 2g --executor-cores 1
spark-sql> select * from ***** where dt='20140909' limit 10;
(2)通过-f从⽂文件中执⾏行hql
spark-sql --master yarn  --num-executors 10 --driver-memory 2g --executor-
memory 2g --executor-cores 1 -f hql.txt > result.data 2> hql.log
(3)通过-e执⾏行指定的hql
spark-sql --master yarn  --num-executors 10 --driver-memory 2g --executor-
memory 2g --executor-cores 1 -e "select * from ***** limit 10" > result.data 2>
hql.log
使⽤用案例
• Spark SQL⽀支持⼤大部分
Hive操作,⽤用户可以平
滑迁移使⽤用
使⽤用案例
• 简单的join
两表join ⼤大表与⼩小表 TB join GB
使⽤用案例
执⾏行计划
使⽤用案例
DAG
使⽤用案例
使⽤用案例
• 多表join 六个表join
使⽤用案例
使⽤用案例
• 使⽤用UDF与hive⼀一样,进⼊入spark-sql,然后通过add
jar和create temporary function就可以使⽤用了
spark-sql> add jar hive_udf.jar;
spark-sql> create temporary function url_to_mid as ‘*****’;
spark-sql> create temporary function mid as ‘*******’;
spark-sql> select url_to_mid('z62QS3Ghr','1','0') from dual;
spark-sql> select mid('3520617028999724') from dual;
WebUI
WebUI
已知的问题
• Spark SQL不⽀支持的场景
(1)不⽀支持INSERT OVERWRITE DIRECTORY ${dir}
(2)不⽀支持基于bucket 的hive表
(3)不⽀支持对最后⼩小⽂文件的合并
(4)不⽀支持对表的分区级别进⾏行缓存,缓存只针对表级
(5)对meta-data的查询也需要启动任务
已知的问题
• ⽤用户需要根据处理数据量来设置executor数,内存⼤大
⼩小和线程数
(1)过少的executor会导致单个executor处理数据过
多,导致OOM问题
(2)过多的executor占据过多资源,所需内存太多,如
果资源紧张,需要⼀一直等待
已知的问题
• Join的问题
(1)⼤大表和⼩小表的join,可以将⼩小表(MB级别)broadcast到⼤大表的各个
executor的task中,控制参数
spark.sql.autoBroadcastJoinThreshold 默认10MB,推荐到100MB
(2)中等数据量的表之间的join,有⼤大量的⺴⽹网络shuffle,可能导致
OOM,GC异常等,需要⼿手动调整shuffle分区数(相当于mr中reduce
数),控制参数spark.sql.shuffle.partitions 默认是200,同时参数
spark.sql.planner.externalSort sorts spill到disk,否则都是memory
(3)⼤大表之间的join,只能测试,⼤大部分情况⽐比hive慢,甚⾄至跑不出来,
使⽤用sort-merge-join去做
已知的问题
• GROUP BY的问题
GROUP BY操作会在map端聚合,采⽤用的是hash结
构,如果数据倾斜严重,单个key数据过多,会导致
OOM,hive通过hive.map.aggr设置为false取消,
spark sql没有参数可以控制
已知的问题
• GC问题
spark通信底层使⽤用netty,会使⽤用较多堆外内存,shuffle过
程中的序列化、反序列化也会占⽤用内存,数据都保存在内存
中..... OOM
检查⽅方法 GC time in UI
设置spark.executor.extraJavaOptions “-XX:-PrintGCDetails
-XX:+PrintGCTimeStamps”
在log中查看gc时间,短的gc时间没问题,如果⻓长时间gc就
需要调整
总结
• 对⽤用户来说,spark sql相⽐比hive还有⼀一定差距
(1)数据量不⼤大的情况下,查询速度是hive的两倍,数
据量较⼤大的情况下,hive查询时间成线程增⻓长,
spark sql有可能⽆无法查询
(2)⽤用户每条语句都需要调整很多参数来达到优化⺫⽬目
的,包括heap size, shuffle个数,是否需要
broadcast,是否外排序,序列化⽅方法,akka
framesize等等
Q&A
Thanks

More Related Content

What's hot (20)

PDF
淘宝软件基础设施构建实践
Wensong Zhang
 
PDF
NoSQL误用和常见陷阱分析
iammutex
 
PDF
一个 Mongodb command 的前世今生
dennis zhuang
 
PDF
Hacking Nginx at Taobao
Joshua Zhu
 
PPTX
Ocean base海量结构化数据存储系统 hadoop in china
knuthocean
 
PPTX
Redis介绍
zhaolinjnu
 
PDF
Big Data, NoSQL, and MongoDB
Monster Supreme
 
PPT
Redis 常见使用模式分析
vincent253
 
PDF
Why use MySQL
Zhaoyang Wang
 
PPTX
Mongo db 特性
Hermes Chiang
 
PPTX
Elastic stack day-2
YI-CHING WU
 
PDF
Google LevelDB Study Discuss
everestsun
 
PPTX
Hdfs
jiang yu
 
PDF
数据库内核分享——第一期
frogd
 
PPT
Dfs ning
Andy Shi
 
PPT
高性能并发Web服务器实现核心内幕
ideawu
 
PDF
Leveldb background
宗志 陈
 
PDF
Elastic search
Samchu Li
 
PPTX
Spark streaming经验介绍
Wenchun Xu
 
PPTX
FHIR Server 安裝與使用
Lorex L. Yang
 
淘宝软件基础设施构建实践
Wensong Zhang
 
NoSQL误用和常见陷阱分析
iammutex
 
一个 Mongodb command 的前世今生
dennis zhuang
 
Hacking Nginx at Taobao
Joshua Zhu
 
Ocean base海量结构化数据存储系统 hadoop in china
knuthocean
 
Redis介绍
zhaolinjnu
 
Big Data, NoSQL, and MongoDB
Monster Supreme
 
Redis 常见使用模式分析
vincent253
 
Why use MySQL
Zhaoyang Wang
 
Mongo db 特性
Hermes Chiang
 
Elastic stack day-2
YI-CHING WU
 
Google LevelDB Study Discuss
everestsun
 
Hdfs
jiang yu
 
数据库内核分享——第一期
frogd
 
Dfs ning
Andy Shi
 
高性能并发Web服务器实现核心内幕
ideawu
 
Leveldb background
宗志 陈
 
Elastic search
Samchu Li
 
Spark streaming经验介绍
Wenchun Xu
 
FHIR Server 安裝與使用
Lorex L. Yang
 

Spark sql培训