Spark 的层次
开发视角多涉及两种层面。
1.一种是Spark自身的开发,
这类开发涉及到Java和Sala以及一些底层的源码。了解这些内容,主要用于底层框架的开发以及针对Spark的二次开发,也就是Spark架构设计与实现。要求深入Spark源码研究和二次开发,这些一般是大数据平台的设计与开发,涉及大型复杂分布式系统的设计和架构。对源码的了解程度要求比较高。
2.还有一种是Spark在业务中的应用开发。
即基于Spark实现数据的处理和计算等操作。多是数据ETL,数据挖掘等数据项目。
2.Spark 基本概念
总结一下各自的阶段和层次,从不同的开发视角上看,侧重点是不同的。
I.Spark的概念构成
Components 组件: SparkCore SparkSQL SparkStreaming MLlib GraphX
部署方式:Local Standalone Yarn 有两种 Client Cluster
编程接口: RDD 以及 DataSet<Row>
RDD: Spark的计算单元,一组RDD可形成执行的有向无环图RDD Graph
Partitions 分区
broadcast 广播变量
II.Spark应用开发的视角
0.开发整个过程
01.创建Maven工程-配置依赖的包
02.编写程序
03.将程序打包
04.上传Jar包,并运行
1.从数据处理过程来说
Source: 输入(来源-读取命令,返回格式)
来源: 文件系统与文件格式(CSV JSON) 数据库系统
读取的命令:
返回的数据类型: RDD DataSet
Operator
Transformer
map flatMap foreache
filter
mapPartitions
groupByKey reduceByKey join
Action
reduce fold aggregate
countByKey
其他相关:
数据类型之间的转换 RDD-RDD
持久化 persist
分区相关的操作
Sink: 输出
文件系统
数据库系统: Hive Hbase MySQL ClickHouse
消息系统: Kafka
2.从执行的模型来说
Map Shuffle Reduce
3.从查看的metric看
Job --》 Stage --》 task
4.从背后的具体执行情况来说
SparkContext
驱动器 -- Driver
执行器 -- Executor
DAG Scheduler: 根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler
TaskScheduler: 将任务(Task)分发给Executor
5.优化以及数据倾斜的处理方式
优化:
从系统执行方面
从代码编写方面
III.Spark开发的视角
源码层面进行改动,或者基于源码的配套开发.
分布式存储,分布式计算。Hadoop HDFS就用做分布式存储的, Spark就是分布式计算系统。
###Spark内部的原理
理论依据可以作为开发的基石。
CAP 定理 Consistency数据一致性,Availability可用性,Partition tolerance分区容错性
BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写