一、Spark Core
1. 什么是Spark Shuffle
Wide Dependencies
*ByKey: groupByKey,reduceByKey
关联操作:join,cogroup
窄依赖:
父RDD的每个分区的数据,仅仅只会给子RDD的一个分区。
Spark性能优化:
开发优化:
依据业务场景及数据,使用较好的RDD的方法
(1)能使用reduceByKey不要使用groupByKey
(2)适当的时候已经处理的数据RDD,进行重新分区
repartition
reduceByKey(func, numPartitions)
coalse
SCALA中的拉链编程
val rdd = sc.parallelize(List(1,2,3,4,5))
val rdd2 = sc.parallelize(List("aa", "bb", "cc", "dd", "ee"))
rdd.zip(rdd2)
rdd.zip(rdd2).collect
2. MapReduce Shuffle
Spark Stages
(1)ResultStage
Stage阶段运行Jobs输出结果
ResultTask
(2)ShuffleMapStage
Stage阶段的RDD会发生Shuffle过程,
ShuffleMapTask
每个Stage中的所有任务的逻辑处理相同(functions)
Spark Scheduler
RDD Objects -> DAGScheduler -> TaskScheduler -> Worker
二、Spark SQL
MapReduce -> Hive
SparkCore -> SparkSQL
1. SQL on Hadoop
(1)Hive
基础,数据仓库,Facebook开源,
(2)Presto
内存,Facebook,依赖于Hive MetaStore
国内:京东
(3)Impala
内存,Cloudera,依赖于Hive MetaStore
应用:电信、游戏
安装方式: RPM包,联网安装,包特别多;CM5.3.x安装CDH5.3.x,包含Impala,界面化安装
(4)Spark SQL
(5)Drill
1PB的数据进行分析查询-> 3s
(6)Kylin
麒麟框架,唯一一个由国人开源的大数据框架,提供中文文档,也是Apache顶级项目
大数据起源搜索引擎,发展于电商互联网,Google三大论文
大数据的前三驾马车: GFS、 MapReduce和BigTable
大数据的后三驾马车: Caffeine、Pregel(Pregel主要绘制大量网上信息之间关系的“图形数据库”)、Dremel
2. SparkSQL
DataFrame = RDD[Row]
封装所有数据,提供一系列方法进行操作。
SQLContext
spark-1.3.0 release
特性: 外部数据源(接口) hiveparquetorcjsonxmljdbc svcsv......
SparkSQL读取文件数据的内容
文件数据格式默认的是parquet格式
Hive引擎:
SQL->Parse(语法解析)->Logical Plan(逻辑计划)->优化LP->Pyhsical Plan(物理计划)
MapReduce
SparkCore
SHark = Spark on Hive spark 1.0之前
Catalyst: Spark SQL引擎
1)替代Hive
shark
SparkSQL与Hive无缝对接继承
企业中开发经验
(1)Hive对要分析的数据进行ETL操作
数据仓库
(2)SparkSQL进行分析
HiveQL:
val df = sqlContext.sql("select * from emp")
DSL:
val df = sqlContext.table("emp").select("empno")
Spark与Hive继承
从某个角度来说,SparkSQL读取Hive表中的数据,就是Hive客户端
(1)hive-site.xml
metastore存储在哪里?MySQL中
(2)数据库驱动包
3. Catalyst
SQL Text
------Parsing ----->Unsolved Logic Plan
------Binding & Anlyzidng -------> Logical Plan
------Optimizing -----> Optimized Logical Plan
------QueryPlanning ----> Physical Plan
4. 如何将依赖包放入到应用CLASSPATH虾米那
(1)--jars
(2)万能
SPARK_CLASSPTH