这是我参与「第四届青训营」笔记创作活动的的第5天
常见的大数据处理链路
数据源 -> 数据采集 -> 数据存储 -> 数据处理 -> 数据分析 -> 数据应用
Spark核心组件
- Spark Core:Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。
- Spark SQL:用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、HBase等多种外部数据源中的数据。
- Spark Structured Streaming:Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理。
- MLlib:Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能。
- GraphX:Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口以及丰富的功能和运算符。
Spark特点
- 统一引擎,支持多种分布式场景
- Spark支持多种语言:SQL,Java/Scala,Python,R
- Spark支持多种数据源:内置DataSource,自定义DataSource
- Spark有丰富的API/算子:SparkCore->RDD,SparkSQL->DataFrame
- 支持K8S/YARN/Mesos资源调度
Spark目前支持的部署模式:
(1)Local模式:在本地部署单个Spark服务。
(2)Standalone模式:Spark自带的任务调度模式。(国内常用)
(3)YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内最常用)
(4)Mesos模式:Spark使用Mesos平台进行资源与任务的调度。(国内很少用)
RDD依赖
RDD依赖就是描述父子RDD之间的依赖关系(Lineage)
- 窄依赖:父RDD的每一个partition只对应一个子RDD分区。
- 宽依赖:父RDD的每一个partition可以对应多个子RDD分区。
什么是RDD
Spark从数据的输入到结果的输出中间的所有数据结构都是基于RDD的。RDD是一个容错的,可以并行执行的一个数据集,是Spark中最基本的数据处理的模型,是SparkCore的一个核心概念。
什么是shuffle
map和reduce之间数据传输的过程,也就是数据重新分发的过程称为shuffle。
业界挑战与实践
-
Shuffle稳定性问题
在大规模作业下,开源ExternalShufileService(ESS)的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题。
解决:远端存储数据;map和reduce端在partition的数据尽可能在shuffle时就聚合,减少排序操作 -
SQL执行性能问题:压榨CPU资源
解决:向量法/Codegen/两者结合 -
参数推荐/作业诊断
问题:参数多、作业失败排查困难
解决:自动参数推荐/作业诊断