初识Spark

Apache Spark

Apache Spark 是一种快速、通用的大规模数据处理引擎,它支持在分布式计算集群上进行批处理、流处理和机器学习等多种工作负载。Spark 最初由加州大学伯克利分校的AMPLab 开发,现在是 Apache 软件基金会的一个顶级项目。

Spark 的主要特点包括:

  1. 速度快:Spark 在内存计算和基于 DAG 的引擎等方面的优化,使其比 Hadoop MapReduce 更快,可以处理更多的数据。
  2. 易用性好:Spark 提供了简单易用的 API,可以用 Java、Scala、Python 和 R 等多种编程语言编写 Spark 应用程序。
  3. 灵活性高:Spark 可以运行在各种环境中,包括独立的集群、Hadoop YARN、Apache Mesos 和 Kubernetes 等。
  4. 支持多种工作负载:除了批处理和流处理,Spark 还支持机器学习、图处理和 SQL 查询等多种工作负载。
  5. 支持多种数据源和格式:Spark 可以处理多种数据源和格式,包括 Hadoop Distributed File System (HDFS)、Apache Cassandra、Apache HBase、Amazon S3 和 Apache Parquet 等。

总之,Spark 是一个功能强大且易于使用的数据处理引擎,可以加速许多大规模数据处理任务。

Spark VS Hadoop

特征SparkHadoop
数据处理模型RDD(弹性分布式数据集)MapReduce
计算模型内存计算和磁盘计算磁盘计算
实时处理支持实时流处理不支持实时流处理
执行速度较快较慢
适用场景迭代式计算、机器学习、图计算等需要频繁交互的场景大批量离线数据处理场景
数据读写支持多种数据源、数据格式和数据存储方式支持多种数据源、数据格式和数据存储方式
集群管理可以与多种集群管理工具(如YARN、Mesos、Kubernetes等)集成使用Hadoop自带的YARN作为集群管理工具

需要注意的是,Spark 和 Hadoop 并不是完全的竞争关系,它们可以在不同的场景下互补使用。例如,在大规模离线数据处理场景下,可以使用 Hadoop 技术栈(包括 HDFS、MapReduce、Hive 等);在需要快速迭代计算、机器学习等场景下,可以使用 Spark 技术栈(包括 Spark Core、Spark SQL、Spark Streaming、MLlib 等)。

Spark集成Hadoop集成

Spark 可以与 Hadoop 集成,通过 Hadoop 的 HDFS 文件系统和 YARN 资源管理器来运行 Spark 应用程序。这种集成方式可以让用户利用 Hadoop 集群中的计算和存储资源来运行 Spark 应用程序,从而更加高效地进行数据处理。

Spark 和 Hadoop 的关系可以从以下几个方面来描述:

  1. Hadoop 是一个生态系统,包括 HDFS、MapReduce、YARN 等组件,用于存储和处理大数据。而 Spark 则是一个数据处理引擎,可以在 Hadoop 的生态系统中使用,也可以独立部署。

  2. Spark 可以利用 Hadoop 的 HDFS 文件系统来读取和写入数据,同时也可以利用 Hadoop 的 YARN 资源管理器来调度和管理 Spark 应用程序。

  3. Spark 和 Hadoop 不同的编程模型和数据处理方式,使得 Spark 可以处理更加复杂的数据处理场景,并且速度更快。

    from pyspark import SparkContext, SparkConf
    conf = SparkConf().setAppName("WordCount").setMaster("yarn")
    sc = SparkContext(conf=conf)
    # 读取 HDFS 文件系统中的文件
    file = sc.textFile("hdfs://localhost:9000/input/text.txt")
    # 对文件中的单词进行计数
    word_counts = file.flatMap(lambda line: line.split(" ")) \
                      .map(lambda word: (word, 1)) \
                      .reduceByKey(lambda a, b: a + b)
    # 将结果写入 HDFS 文件系统
    word_counts.saveAsTextFile("hdfs://localhost:9000/output/word_count")
    # 关闭 SparkContext
    sc.stop()
    

    在这个示例代码中,我们首先创建了一个 SparkConf 对象,设置了应用程序的名称和运行模式(yarn)。然后使用 SparkContext 对象读取 HDFS 文件系统中的文件,并对文件中的单词进行计数。最后,将结果写入 HDFS 文件系统,并关闭 SparkContext 对象。

    需要注意的是,这个示例代码需要在安装了 Hadoop 集群和 Spark 集群的环境中运行。同时,需要将 Hadoop 集群的配置文件拷贝到 Spark 集群中,以便 Spark 可以正确地访问 HDFS 文件系统和 YARN 资源管理器。

Spark的运行架构

组件描述
Spark Application用户编写的Spark程序,包括Driver Program和运行在Executor上的Task。
Cluster Manager负责管理集群资源,为Executor分配资源并启动Executor进程。支持的Cluster Manager包括Standalone、YARN和Mesos。
Executor运行在集群节点上的进程,负责具体的任务执行。
Task Scheduler负责将TaskSet中的任务发送给已启动的Executor。
RDD弹性分布式数据集,是Spark的基本数据模型。RDD支持多种操作,例如transformation和action操作。

以上是Spark的运行架构中的主要组件及其描述。在Spark运行过程中,这些组件相互协作,实现了Spark的分布式计算功能。

Spark组件

组件说明
Spark Core提供基本的函数式编程 API 和 RDD 用于存储数据。负责任务调度、内存管理。
Spark SQL处理结构化数据的组件,支持 SQL queries、DataFrames 和 Datasets。可以与 Hive 交互。
Spark Streaming扩展 Spark 批处理能力,支持实时流数据处理。
MLlib用于机器学习算法的库,提供分类、聚类、推荐等算法。

其他组件:

  • GraphX:处理图形与顶点数据
  • SparkR:R 语言绑定
  • Hive Context:与 Hive 交互
  • PySpark:Python 绑定

总的来说:

  • Spark Core 是核心组件,提供基础功能。
  • Spark SQL、Streaming 和 MLlib 是主要的功能扩展,用于结构化数据、流数据和机器学习。
  • 其他组件提供特定功能,方便与其他系统交互。

Spark部署方式

部署方式概念优点缺点应用场景
Standalone 模式使用 Spark 自己的Master 节点调度和Worker 节点执行任务- 部署简单- 性能高- 管理开销低- 不易扩展到大规模集群- 中小型集群 - 独立部署
YARN 模式使用 Hadoop YARN 作为资源管理器- 可以扩展到大规模集群- 可以整合HDFS 等Hadoop组件- 管理开销相对较高- 大型集群 - 需要与Hadoop整合
Mesos 模式使用 Apache Mesos 作为资源管理器- 与 Mesos Framework 无缝集成- 资源利用率高- 相对复杂一些- Mesos集群

Spark节点

Spark 应用程序由 driver 节点和多个 worker 节点组成。

driver 节点:

  • 运行 Spark app 的主程序代码。
  • 负责作业提交、上下文环境创建、资源分配、任务分发等。

driver资源分配与Yarn的关系

- 当 Spark 在 YARN 的管理下运行时(YARN mode),driver 节点不再负责资源分配。

- 这时资源分配由 YARN 管理,具体来说是:

  - driver 节点向 YARN 申请 executors(执行节点)。

  - YARN 根据资源可用性,在集群中分配 executor 实例。

  - YARN 将这些 executors 的信息返回给 driver 节点。

- driver 节点仍负责环境配置、任务分发、结果汇总等工作。但不再分配资源。

- executor 相当于 worker 节点,执行分配给它们的 tasks 并返回结果。

所以总的来说:

- 当 Spark 在 Standalone 模式下运行时,driver 节点负责资源分配。

- 当 Spark 在 YARN 模式下运行时,由 YARN 负责资源分配。driver 只需申请 executors 即可。

- driver 节点的其他工作(环境配置、任务分发、结果汇总)不变。

- executor实例相当于worker节点,执行tasks并返回结果。
  • 与用户交互,接受用户输入参数和执行任务。

worker 节点:

  • 执行分配给它们的任务。
  • 提供计算能力和内存存储。

工作流程:

  1. 用户在 driver 节点上提交 Spark 应用。

  2. driver 创建执行环境上下文、配置参数。

  3. driver 与 worker 节点建立连接,注册信息。

  4. driver 将 RDD 和任务(函数、操作)分发给 worker 节点。

  5. 每个 worker 节点执行分配给它们的任务。

  6. worker 节点执行结果返回给 driver 节点。

  7. driver 节点将所有结果汇总,返回给用户应用程序。

st=>start: 用户提交应用
op1=>operation: Driver 创建执行环境
op2=>operation: Driver 与 Workers 连接注册
op3=>operation: Driver 分发 tasks 到 Workers
op4=>operation: Workers 执行分配到的 tasks
op5=>operation: Workers 返回结果给 Driver
op6=>operation: Driver 汇总结果,返回给应用
e=>end
st->op1->op2->op3->op4->op5->op6->e

总的来说:

  • driver 节点跟用户交互,负责任务提交、分配和 orchestrate 。
  • worker 节点提供计算与存储资源,执行分配给它们的任务。
  • driver 将任务分发给 worker,worker 执行任务并返回结果。
  • 通过这种机制,RDD任务得到高效的均衡分布执行。

Executor

Executor 是 Spark 中负责执行任务的工作进程。

它与 Worker 节点的概念类似,但 Executor 更准确一些。主要区别是:

  • Worker 节点对应 Standalone 模式中的一台计算机,提供计算和存储资源。
  • Executor 是 YARN 模式中分配给 Spark app 的一个任务Slot。它对应一个 JVM 进程。

具体来说,Executor 有以下特点和作用:

  • Executor 是一个 JVM 进程,负责执行分配给它的任务 (Tasks) 。

  • Executor 与 Driver 节点通过长连接或消息队列进行通信。

  • Executor 通过心跳保持与 Driver 节点的连接,重启后可以从之前的任务中恢复。

  • Driver 可以动态增加或者减少 Executor 的数量,来应对workload的变化。

  • Executor 负责在其本地的内存中执行和缓存 RDD 所对应的任务。

所以可以总结:

Executor 是 Spark cluster 中 真正执行任务的进程
它对应一个 JVM 进程,可以执行分配给它的多个 tasks 。

通过让 Driver 可以动态增加或者减少 Executor 的数量,来实现 Spark 任务高效运行。

总结

组件含义关系作用
SparkApplication一个Spark应用提交一个或多个Job完成用户业务任务
SparkContextSpark应用的入口管理一个或多个Job处理数据和运行任务
JobSpark负责调度和执行的最高级工作单元由一个SparkContext提交完成一件工作
Stage多个任务的逻辑划分多个Stage构成一个Job将任务进行分组
Task可以独立运行的工作单元一个Stage由一个或多个Task组成执行转换操作
TaskSetTask的集合执行相同transformation优化内存和网络使用
TaskScheduler任务调度器管理Stage和Task确保Task高效运行
Executor执行一个或多个Task由Driver分配和管理执行真正的任务
Driver一个程序负责编排和协调整个应用协调Executor和任务
Worker提供计算和存储资源一个或多个Executor运行其上执行Task

总结:

  • Application 提交 Job -> SparkContext 管理 Job -> Job 分解为 Stage -> Stage 分为 Task -> Task 执行于 Executor 上。

  • TaskScheduler 负责调度 Stage 和 Task 以用于 Executor。

  • Driver 负责编排整个应用,调度 Executor 和任务。

  • Worker 提供资源运行 Executor,间接执行 Task。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值