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

PPTX
NoSQL-MongoDB介紹
PDF
redis 适用场景与实现
PPTX
“云存储系统”赏析系列分享三:Sql与nosql
PPTX
Exadata那点事
PPT
OTN软硬件结合数据库解决方案
PDF
Mesos intro
PPTX
Elastic stack day-1
PPTX
Mongo db 簡介
NoSQL-MongoDB介紹
redis 适用场景与实现
“云存储系统”赏析系列分享三:Sql与nosql
Exadata那点事
OTN软硬件结合数据库解决方案
Mesos intro
Elastic stack day-1
Mongo db 簡介

What's hot (20)

PDF
淘宝软件基础设施构建实践
PDF
NoSQL误用和常见陷阱分析
PDF
一个 Mongodb command 的前世今生
PDF
Hacking Nginx at Taobao
PPTX
Ocean base海量结构化数据存储系统 hadoop in china
PPTX
Redis介绍
PDF
Big Data, NoSQL, and MongoDB
PPT
Redis 常见使用模式分析
PDF
Why use MySQL
PPTX
Mongo db 特性
PPTX
Elastic stack day-2
PDF
Google LevelDB Study Discuss
PPTX
Hdfs
PDF
数据库内核分享——第一期
PPT
Dfs ning
PPT
高性能并发Web服务器实现核心内幕
PDF
Leveldb background
PDF
Elastic search
PPTX
Spark streaming经验介绍
PPTX
FHIR Server 安裝與使用
淘宝软件基础设施构建实践
NoSQL误用和常见陷阱分析
一个 Mongodb command 的前世今生
Hacking Nginx at Taobao
Ocean base海量结构化数据存储系统 hadoop in china
Redis介绍
Big Data, NoSQL, and MongoDB
Redis 常见使用模式分析
Why use MySQL
Mongo db 特性
Elastic stack day-2
Google LevelDB Study Discuss
Hdfs
数据库内核分享——第一期
Dfs ning
高性能并发Web服务器实现核心内幕
Leveldb background
Elastic search
Spark streaming经验介绍
FHIR Server 安裝與使用
Ad

Spark sql培训