SlideShare ist ein Scribd-Unternehmen logo
1 von 24
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

Weitere ähnliche Inhalte

Was ist angesagt?

淘宝软件基础设施构建实践
淘宝软件基础设施构建实践淘宝软件基础设施构建实践
淘宝软件基础设施构建实践Wensong Zhang
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Ocean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaOcean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaknuthocean
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBMonster Supreme
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2YI-CHING WU
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期frogd
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background宗志 陈
 
Elastic search
Elastic searchElastic search
Elastic searchSamchu Li
 
Spark streaming经验介绍
Spark streaming经验介绍Spark streaming经验介绍
Spark streaming经验介绍Wenchun Xu
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用Lorex L. Yang
 

Was ist angesagt? (20)

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

Ähnlich wie Spark sql培训

The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...acelyc1112009
 
Spark性能调优分享
Spark性能调优分享Spark性能调优分享
Spark性能调优分享Wenchun Xu
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管Will Huang
 
Introduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaIntroduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaWang Haihua
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 maclean liu
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報Wales Chen
 
HDFS與MapReduce架構研討
HDFS與MapReduce架構研討HDFS與MapReduce架構研討
HDFS與MapReduce架構研討Billy Yang
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
Hadoop con 2015 hadoop enables enterprise data lake
Hadoop con 2015   hadoop enables enterprise data lakeHadoop con 2015   hadoop enables enterprise data lake
Hadoop con 2015 hadoop enables enterprise data lakeJames Chen
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计mingjin
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程yiditushe
 

Ähnlich wie Spark sql培训 (20)

The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
 
Spark tutorial
Spark tutorialSpark tutorial
Spark tutorial
 
Spark性能调优分享
Spark性能调优分享Spark性能调优分享
Spark性能调优分享
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Introduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaIntroduction of Spark by Wang Haihua
Introduction of Spark by Wang Haihua
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報
 
HDFS與MapReduce架構研討
HDFS與MapReduce架構研討HDFS與MapReduce架構研討
HDFS與MapReduce架構研討
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
Spark tutorial
Spark tutorialSpark tutorial
Spark tutorial
 
Hadoop con 2015 hadoop enables enterprise data lake
Hadoop con 2015   hadoop enables enterprise data lakeHadoop con 2015   hadoop enables enterprise data lake
Hadoop con 2015 hadoop enables enterprise data lake
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
 

Spark sql培训