序
2019年就快结束啦,又到了总结过去展望未来的时候,最近和小伙伴们在进行Spark的功能的梳理,以便进一步研究学习。
正文
这么大的图不收藏吗
Spark功能点(文字版)
Spark Streaming
Spark Streaming是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理。数据可以从像 Kafka, Flume, Kinesis, 或 TCP sockets许多来源摄入,并且可以使用与像高级别功能表达复杂的算法来处理map,reduce,join和window。最后,可以将处理后的数据推送到文件系统,数据库和实时仪表板。实际上,也可以在数据流上应用Spark的 机器学习和 图形处理算法
DStreams
Discretized Streams(离散流)
离散流或DStream是Spark Streaming提供的基本抽象。它表示连续的数据流,可以是从源接收的输入数据流,也可以是通过转换输入流生成的已处理数据流。在内部,DStream由一系列连续的RDD表示,这是Spark对不可变的分布式数据集的抽象。
DStream中的每个RDD都包含来自特定间隔的数据
-
Input DStreams and Receivers
-
Receiever
每个输入DStream都与一个Receiver对象关联,该对象从源接收数据并将其存储在Spark的内存中以进行处理。
- 可靠
- 不可靠
-
基本来源(StreamingContext API提供Receiver)
- 文件系统
- 套接字连接
-
高级来源(自定义Receiver)
- Kafka
- Flume
- Kinesis
-
自定义数据源
-
Queue of RDDs as a Stream
-
-
Output Operations on DStreams
-
Hdfs
-
DataBases
- Hbase
- MySql
-
DashBoards
-
-
DataFrame and SQL Options
-
Transformations on DStreams
-
RDD-to-RDD
-
连接操作
- Stream-stream joins
- Stream-dataset joins
-
窗口操作
- reduceByWindow
- reduceByKeyAndWindow
- countByValueAndWindow
- ...
-
-
graph processing algorithms
-
MLlib
-
streaming ML algorithms
- 流线型回归
- 流KMeans
- ...
-
离线数据训练模型在线应用于流数据
-
流数据训练模型
- 训练好的模型在线应用于流数据
-
容错机制
-
Cashing/Persistence
- 持久化(缓存)到内存
- 设置持久性级别
-
容错语义
-
三种保证
- At most once
- Exactly once
- At least once
-
-
CheckPoint
-
Metadata checkpointing
将定义流计算的信息保存到HDFS等容错存储中,用于从运行流应用程序的驱动程序的节点的故障中恢复
-
Data checkpointing
某些状态转换中这是必须的,这些转换将跨多个批次的数据进行合并。在此类转换中,生成的RDD依赖于先前批次的RDD,这导致依赖项链的长度随时间不断增加。为了避免恢复时间的这种无限制的增加(与依存关系链成比例),有状态转换的中间RDD定期 检查点到可靠的存储(例如HDFS)以切断依存关系链。
-
-
Accumulators, Broadcast Variables, and Checkpoints
无法从Spark Streaming中的检查点恢复累加器和广播变量。如果启用检查点并同时使用“ 累加器”或“ 广播”变量 ,则必须为“ 累加器”和“ 广播”变量创建延迟实例化的单例实例, 以便在驱动程序发生故障重新启动后可以重新实例化它们
- 创建延迟实例化的单例实例
Core
RDDs
-
RDD算子
- Transformations
- Actions
-
集合并行化
-
外部数据集
- Local File
- HDFS
- Cassandra
- HBase
- S3
- other Hadoop InputFormat
-
持久化
-
缓存
-
存储级别
-
MEMORY_ONLY
-
MEMORY_AND_DISK
-
MEMORY_ONLY_SER
- Java and Scala
-
MEMORY_AND_DISK_SER
- Java and Scala
-
DISK_ONLY
-
MEMORY_ONLY_2 etc.
-
OFF_HEAP
- off-heap memory
-
-
容错
- Lineage
-
LRU
- Removing Cache Data
-
闭包
- Local vs. cluster modes
Shuffle操作
- Sorted Based Shuffle
共享变量
-
广播变量
- Broadcast Variables
-
累加器
- Accumulators
Spark SQL
SparkSession
- Spark application configuration
- Creating DataSet/DataFrame
- SQL API
- SparkContext
- catalog元数据
Dataset/DataFrame
-
Creating DataSet/DataFrame
-
RDD
-
外部数据源
- HDFS
-
-
Data Sources
-
LOAD/SAVE操作
-
列式存储格式文件
- Parquet Files
- ORC Files
-
非结构化数据文件
- CSV Files
- Text Files
-
半结构化数据文件
- JSON Files
-
非结构型数据库
- Hbase
-
结构型数据库
-
Mysql
- JDBC/ODBC
- Spark SQL CLI
-
Hive
- SparkSession.enableHiveSupport
- Spark SQL CLI
-
-
-
DataSet/DataFrame/RDD转换
-
DataSet/DataFrame API
-
SQL语句
-
catalog元数据
- Hive metastore
- In-memory
-
SQL语言类别
- DDL
- DML
- DQL
- DCL
-
内置函数
- 单行函数
- 聚合函数
-
-
DSL语句
-
领域特定语言
- .filter
- .select
-
-
-
schema API
- 展示schema
- 定义schema
UDF
-
UDAF
- Untyped UDAF
- Typed UDAF
-
UDTF
Spark SQL on Hive
- 已部署Hive框架
- 未部署Hive框架
Performance Tuning
- Caching Data In Memory
- Other Configuration Options
- Broadcast Hint for SQL Queries
Spark SQL技术点
-
执行流程
-
Logical Plan
-
SQL Parse
-
UnresolvedLogicalPlan
- DDLParser
- SqlParser
- SparkSQLParser
-
-
Catalyst Analyzer
- ResolvedLogicalPlan
-
Catalyst Optimizer
- OptimizedLogicalPlan
-
-
SparkPlanner
-
父类:QueryPlanner
-
Strategies
- LeftSemiJoin
- HashJoin
- PartialAggregation
- BroadcastNestedLoopJoin
- TakeOrdered
-
-
Physical Plan
-
prepareForExecution
- Executable PhysicalPlan
-
execute
- SchemaRDD
-
-
-
性能优化
-
减少或避免出现Shuffle过程
- 统一分区策略
- 广播机制
-
数据倾斜
- 自定义Partitioner
-
内存缓存数据
-
核心属性
- spark.driver.cores
- spark.driver.memory
- spark.executor.cores
- spark.executor.memory
- spark.sql.shuffle.partitions
-
Delta Lake
数据湖
MLlib
Spark AI
GraphX
Spark Graph
Structured Streaming
Streaming Dataset/Streaming DataFrame
-
Creating Streaming Dataset/Streaming DataFrame
-
File source
- 文件生成工作流
- 文件、文件夹生成自动分区工作流
-
Kafka source
- Streaming模式生成工作流
- Batch模式生成工作流
-
Socket source
-
Rate source
-
-
SQL query
-
Window Operations on Event Time
- 窗口生成规则
- 窗口工作方式
-
Watermark
- Updata Mode
- Append Mode
- Complete Mode(必须提前聚合)
-
Streaming Deduplication
-
Join Operations
- Stream-Static数据join操作
- Stream-Stream数据join操作
-
Trigger
- Trigger.ProcessingTime(时间间隔)
- Trigger.Once()
- Trigger.Continuous(Checkpoint间隔)
-
管理与监控工作流
- Managing Streaming Queries
- Monitoring Streaming Queries
-
Checkpoint
Continuous Processing
-
Sources
- Kafka source
- Rate source
-
Sinks
- Kafka sink
- Memory sink
- Console sink
监控
StreamingListener界面监控
- 接收器状态
- 处理时间
Job Web UI
-
Streaming tab
使用StreamingContext时, Spark Web UI会显示一个附加Streaming选项卡
-
正在运行的接收器
- 接收器状态
- 接收到的记录数
- 接收器错误
-
已完成的批处理
- 批处理时间
- 排队延迟
-
-
4040 etc.
该端口是活动的,如果4040被占用,会依次类推到4041,4042,4043……
- Stages and Tasks
- Rdd大小及内存使用
- 环境信息
- running executors
-
eventLog.enabled
- true
Spark's History Server
-
端口
- 18081
-
kerberos
-
访问控制
- acls
Rest API
-
ip:18081/api/v1
-
历史记录服务
- app-id
-
-
ip:4040/api/v1
- 正在运行的任务
指标系统
-
Dropwizard指标库
-
接收器
-
Http
-
JMX
-
CSV
-
Ganglia
-
许可限制
- LGPL许可
- 自定义安装
-
-
高级分析
-
系统分析工具
- dstat
- iostat
- iotop
-
JVM工具
- jstack
- jmap
- jstat
- jconsole
部署方式
Local
YARN
Mesos
Standalone
Kubernetes
编程接口
Scala
Java
Python
R
SQL
SQL并不特指一门编程语言,Spark SQL是用于结构化数据处理的Spark模块,2.x引入了ANSI-SQL解析器,提供标准化SQL的解析功能,Spark现在可以运行完整的99个TPC-DS查询,包含大多数SQL 2003标准的特性。
-
Built-in Funcs
Shell
ps:图中没有对GraphX、MLlib组件进行描述
小声:mind导出的原图太大,上传后不清晰,因此列了文字。