Spark知识点

本文介绍了Spark的主要应用场景,如批处理、流处理和数据挖掘。深入探讨了Spark与Hadoop的关系,包括Hadoop的各个版本特点和Yarn的调度流程。文章还详细讲解了Spark的RDD、DataFrame、DataSet、Spark SQL、Shuffle、性能调优以及Spark Streaming的关键概念和调优策略,包括Structured Streaming和反压机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark知识点

1.Spark的使用场景

Spark官网给出的说法:Spark是一个通用的快速分析引擎。Spark为我们常见的批处理、流处理、数据探索(数据挖掘)、机器学习等场景提供了很好的解决方案,任何有数据分析需求的人都可以使用。

2.“三架马车”

从 2003 年到 2006 年,Google 分别在 ODSI 与 SOSP 发表了 3 篇论文,引起了业界对于分布式系统的广泛讨论,这三篇论文分别是:

SOSP2003:The Google File System; 分布式文件系统(GFS)

ODSI2004:MapReduce: Simplifed Data Processing on Large Clusters; 分布式计算框架(MapReduce)

ODSI2006:Bigtable: A Distributed Storage System for Structured Data。 分布式数据存储(Hbase)

3.Hadoop的各个版本特点

1)Hadoop1.0:主节点可靠性差,没有热备。作业过多使得调度成为瓶颈。资源利用率低,并且不能适配其他分布式计算框架

2)Hadoop2.0:引入了资源管理和调度系统Yarn。HDFS变成了很多系统的底层存储,Yarn兼容多种计算框架。

3)Hadoop3.0:MR变为基于内存+IO+磁盘共同处理数据。

4.统一资源管理与调度—Yarn

统一是所有计算框架对于资源的获取都是一致的。资源的维度有两个:CPU和内存。调度的宏观机制目前有三种:集中式调度器、双层调度器、状态共享调度器

5.Yarn调度流程

在这里插入图片描述

第 1 步:客户端向 ResourceManager 提交自己的应用,这里的应用就是指 MapReduce 作业。

第 2 步:ResourceManager 向 NodeManager 发出指令,为该应用启动第一个 Container,并在其中启动 ApplicationMaster。

第 3 步:ApplicationMaster 向 ResourceManager 注册。

第 4 步:ApplicationMaster 采用轮询的方式向 ResourceManager 的 YARN Scheduler 申领资源。

第 5 步:当 ApplicationMaster 申领到资源后(其实是获取到了空闲节点的信息),便会与对应 NodeManager 通信,请求启动计算任务。

第 6 步:NodeManager 会根据资源量大小、所需的运行环境,在 Container 中启动任务。

第 7 步:各个任务向 ApplicationMaster 汇报自己的状态和进度,以便让 ApplicationMaster 掌握各个任务的执行情况。

第 8 步:应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。

6.Spark on Yarn的调度方式

Spark自己实现了一个集中式调度器Driver,用来调度作业内的计算任务。本质是Driver在Yarn中注册成为(框架调度器)二级调度器,是一种曲线救国的双层调度实现方式。

7.Spark RDD(弹性分布式数据集)是对数据的核心抽象,实质上是一组分布式的JVM不可变对象的集合。

弹性体现在出错之后的血缘回溯、转换时分区位置及数量的不确定性。

8.创建RDD的几种方式

并行化集合
val rdd = spark.sparkcontext.parallelize(Seq(1, 2, 3))
从 HDFS 中读取
val rdd = spark.sparkcontext.textFile("h
### Spark核心技术知识点总结 #### 1. **Spark概述** Spark 是一种高性能的分布式计算框架,主要用于大规模数据集上的快速计算。与 Hadoop 不同的是,Spark 提供了一个统一的计算引擎,支持批处理、流处理以及交互式查询等多种场景[^1]。 #### 2. **Spark架构组成** - **核心模块**: Spark Core 是整个 Spark 生态的基础组件,提供了任务调度、内存管理和错误恢复等功能。 - **计算模块**: - **Spark SQL**: 支持结构化数据的处理和分析,允许通过 SQL 或 DataFrame API 进行操作[^4]。 - **Spark Streaming**: 实现低延迟的流式数据处理功能,能够对接多种消息队列系统(如 Kafka 和 Flume)[^3]。 - **MLlib**: 提供机器学习算法库,适用于大规模数据分析和建模。 - **GraphX**: 面向图计算的应用程序设计,适合社交网络分析等领域。 - **存储层**: Spark 自身并不提供分布式文件系统的实现,通常依赖于外部存储系统(如 HDFS),但在运行过程中可以通过缓存机制将中间结果保存在内存中以提升性能[^2]。 #### 3. **RDD (Resilient Distributed Dataset)** 这是 Spark 中最基本的数据抽象形式,表示不可变的分区记录集合。主要特点如下: - 容错性:自动重新计算丢失的部分。 - 缓存能力:可以显式调用 `persist()` 方法来决定如何缓存 RDD 数据(磁盘/内存等)。如果希望强制写入硬盘作为检查点,则需单独设置逻辑并配合 checkpoint 功能完成[^5]。 #### 4. **DAG Scheduler** 有别于传统 MapReduce 的两阶段作业划分方式,Spark 使用 DAG(Directed Acyclic Graph)调度器动态规划复杂的多步转换流程,在减少不必要的 I/O 开销方面表现优异。 #### 5. **部署模式** 支持本地单机测试环境(`local`)外加集群环境下多种管理模式的选择,例如独立版 Standalone Cluster Manager 或者集成现有资源管理系统像 Apache Mesos/YARN 来分配节点资源给各个应用实例使用[^2]。 ```scala // 示例代码展示如何创建一个简单的 Spark 应用程序连接 MySQL 数据源 import java.util.Properties object MysqlConnector { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("Mysql Connector Example") .config("spark.master", "local[*]") .getOrCreate() val jdbcUrl = "jdbc:mysql://localhost:3306/testdb" val connectionProperties = new Properties() connectionProperties.put("user", "root") connectionProperties.put("password", "") // Read data from a MySQL table named 'employees' val df = spark.read.jdbc(jdbcUrl, "employees", connectionProperties) df.show() spark.stop() } } ``` --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值