Spark原理与实践 | 青训营笔记

110 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第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/两者结合

  • 参数推荐/作业诊断
    问题:参数多、作业失败排查困难
    解决:自动参数推荐/作业诊断