大数据开发Spark

本文详细介绍了Spark,一个高效的大数据处理平台,包括其特点(速度快、易用、通用、兼容),数据结构(结构化、非结构化和半结构化),运行结构(master-slave架构和RDD),以及部署方式(standalone和YARN)。重点讲解了RDD、转换与行动算子、宽依赖与窄依赖,以及Stage划分和Task定义,展示了Spark在大规模数据处理中的关键特性。
摘要由CSDN通过智能技术生成

目录

什么是spark:

Spark的特点:

Spark生态圈:​编辑

数据结构:

Spark运行结构:

Spark的三种部署方式:

standalone模式

Spark on YARN模式

RDD:

Tranformation算子:转换算子

 Action算子:触发算子 行动算子

通过RDD,Spark提供了一种高效、灵活的数据处理方式,能够应对大规模数据集的处理需求。

Stage的划分:

如何定义Task:


Spark官网: http://spark.apachecn.org/docs/cn/2.2.0/index.html

什么是spark

是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。

它是基于内存,分布式计算工具

Spark的特点

快:与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上;

易用:Spark 支持 Java、Python、R 和 Scala 的 API,还支持超过 80 种高级算法,使用户可以快速构建不同的应用;

通用:Spark 提供了统一的解决方案;

兼容:Spark 可以非常方便地与其他的开源产品进行融合。

Spark生态圈:

SparkMapReduce对比:

SparkMapReduce
相较于mr没有mr更稳定稳定
容错更高,更通用编程API不灵活、速度慢、只能做离线计算
数据结构:

什么是结构化数据:

数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。

什么是非结构化数据:

非结构化数据一般指大家文字型数据,但是数据中有很多诸如时间,数字等的信息。

什么是半结构化数据:

介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据。

Spark运行结构

Spark 框架的核心是一个计算引擎,它采用了标准 master-slave 的结构。

Spark 框架有两个核心组件:

  • Driver
  • Executor

Driver 在Spark 作业执行时主要负责:

  • 将用户程序转化为作业(job)
  • 在 Executor 之间调度任务(task)
  • 跟踪Executor 的执行情况
  • 通过UI 展示查询运行情况

Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。

  • 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
  • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

Master & Worker
Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和 Worker,这里的 Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算,类似于 Yarn 环境中 NM。

Spark的三种部署方式:
standalone模式

Spark on YARN模式

集群模式:

  1. 集群中的资源被划分为多个节点(Node)。
  2. 应用程序被打包为一个或多个任务(Job)。
  3. 任务被提交给YARN集群。
  4. YARN根据任务的需求和集群的资源状况,将任务分配给可用的容器。
  5. 任务在容器中执行,并返回结果。
  6. 当任务完成时,YARN将释放容器并将资源返回给集群。

YARN集群模式的优势包括:

  • 资源弹性分配:YARN能够根据应用程序的需求动态分配和管理集群资源,实现资源的弹性分配和利用。
  • 多租户支持:YARN支持多个应用程序同时运行在同一个集群上,每个应用程序都有自己的资源分配和管理。
  • 高可伸缩性:YARN的设计允许集群规模的扩展,支持大规模数据处理和分布式计算。
  • 容错性:YARN能够处理节点故障和任务失败,保证应用程序的稳定性和可靠性。

总之,YARN集群模式是一种灵活、可扩展和高效的Hadoop集群管理方式,能够有效地利用集群资源,提供稳定可靠的分布式计算环境。

YARN客户端模式:

在YARN客户端模式中,应用程序的客户端负责以下几个主要任务:

  1. 提交应用程序:客户端将应用程序的描述信息(比如应用程序的jar包、启动命令等)提交给ResourceManager,以启动应用程序。
  2. 监控应用程序:客户端可以通过与ResourceManager通信,获取应用程序的运行状态和日志信息。
  3. 上传资源:应用程序需要的资源(如配置文件、数据文件等)可以由客户端上传到HDFS或其他存储系统,供应用程序在集群上使用。

在YARN客户端模式中,应用程序的各个组件(如ApplicationMaster、任务执行者等)被直接部署在集群的节点上,与ResourceManager和NodeManager进行通信。客户端只负责应用程序的启动和管理,不参与实际的任务执行。

相比于YARN集群模式,YARN客户端模式的主要优势是灵活性和集中化管理。由于应用程序的各个组件不需要直接与客户端通信,可以独立运行在集群中的任何节点上,提高了集群的利用率。同时,客户端可以通过与ResourceManager交互来监控和管理应用程序,简化了应用程序的部署和管理过程。

RDD:

Tranformation算子:转换算子
  • 功能:用于实现对RDD的数据进行转换
  • 特点:都是lazy模式的,"一般"不会触发job的运行,算子返回值一定是RDD
 Action算子:触发算子 行动算子
  • 功能:触发job的运行,用户对RDD的数据进行输出或者保存
  • 特点:一定会触发job的运行,返回值一定不是RDD

RDD(Resilient Distributed Datasets)是Spark的核心数据集,是一种抽象的数据结构。它是一个可弹性恢复的、分布式的数据集合,可以在分布式计算集群上进行并行处理。RDD具有以下特性:

  1. 弹性恢复:RDD会自动进行容错,如果某个分区数据丢失,Spark可以根据血统信息重新计算该分区数据。

  2. 分布式的:RDD将数据集合分布在集群的多个节点上,并可以并行处理每个分区的数据。

  3. 不可变性:RDD的数据是不可变的,一旦创建就不能修改。若要对数据进行转换操作,需要创建一个新的RDD。

RDD支持两类操作:

  • 转换操作(Transformations):对RDD进行转换得到新的RDD,转换操作是惰性执行的,只有在执行一个行动操作时才会真正触发转换计算。
  • 行动操作(Actions):对RDD进行行动操作会返回结果或触发一些副作用操作,例如输出结果到文件系统。
通过RDD,Spark提供了一种高效、灵活的数据处理方式,能够应对大规模数据集的处理需求。
宽依赖与窄依赖:

宽依赖(Shuffle Dependency)
父RDD与子RDD partition之间的关系是一对多。会有shuffle的产生。父RDD的一个分区的数据去到子RDD的不同分区里面。

窄依赖 (Narrow Dependency)

父RDD和子RDD partition之间的关系是一对一的。或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD partition关系是多对一的。不会有shuffle的产生。父RDD的一个分区去到子RDD的一个分区。

Stage的划分:

目录

什么是spark:

Spark的特点:

Spark生态圈:​编辑

数据结构:

Spark运行结构:

Spark的三种部署方式:

standalone模式

Spark on YARN模式

RDD:

Tranformation算子:转换算子

 Action算子:触发算子 行动算子

通过RDD,Spark提供了一种高效、灵活的数据处理方式,能够应对大规模数据集的处理需求。

宽依赖与窄依赖:

Stage的划分:

如何定义Task:


        在Spark中,作业(Job)会被划分为多个阶段(Stage),每个阶段包含一组可以并行执行的任务(Task)。Spark的阶段划分主要是为了实现任务的并行执行和数据的局部性优化。

阶段的划分是通过依赖关系(Dependency)和数据宽度(Shuffle)来进行的。在一个作业中,每个阶段都是由相同类型的转换操作(例如map、filter、reduceByKey等)组成的,而且要求输入RDD的分区数与输出RDD的分区数相等。根据这些前提条件,Spark会根据依赖关系划分多个阶段。

具体的划分过程如下:
1. 初始阶段:作业中的第一个转换操作会成为初始阶段(Stage 0),该阶段的输入RDD是用户创建的RDD。
2. 窄依赖阶段:如果转换操作的子RDD与父RDD之间存在窄依赖关系(即每个父分区只被一个子分区使用),则该转换操作会被添加到当前阶段中。
3. 宽依赖阶段:如果转换操作的子RDD与父RDD之间存在宽依赖关系(即一个父分区被多个子分区使用),则当前阶段会被划分为多个子阶段,并且需要进行数据洗牌操作,即通过网络传输将不同分区的数据重新组合。
4. 重复步骤2和3:根据转换操作之间的依赖关系,重复执行步骤2和步骤3,直到所有转换操作都被分配到相应的阶段。

通过阶段的划分,Spark可以将作业中的任务进行并行化执行,并根据数据的局部性进行任务调度和数据本地化优化。这样可以提高作业的执行效率和性能。

如何定义Task

        在Spark中,Task是对数据进行操作的最小单位,它是作业(Job)在集群中的一个并行执行单元。每个Task都会在一个分区的数据上执行一系列的操作,并产生一个或多个输出结果。

Task的定义取决于作业的操作类型,例如map、reduce、filter等。一般来说,Task的定义包括以下几个要素:

1. 输入数据:Task需要在一个或多个输入分区的数据上执行操作。这些输入数据可以是RDD、DataFrame或Dataset等数据集。
2. 操作类型:Task需要执行的操作类型,例如map、reduce、filter等。这决定了Task要在输入数据上进行何种计算。
3. 参数设置:Task可能需要额外的参数来帮助执行操作。例如,map操作可能需要指定一个函数来进行映射,reduce操作可能需要指定一个聚合函数等。
4. 输出结果:Task执行完毕后,会产生一个或多个输出结果。这些输出结果可以是新的RDD、DataFrame或Dataset等。

在Spark中,Task是由Scheduler负责调度和执行的。Spark的调度器会将作业划分为一系列的阶段(Stage),每个阶段由多个Task组成。每个Task都会在一个Executor上执行,并且会并行处理输入数据的不同分区。

可以通过Spark的API或编程模型来定义Task。例如,在Spark的编程模型中,可以使用map、reduce、filter等操作来定义Task的操作类型,并使用lambda表达式或函数来定义具体的操作逻辑。

总之,Task是对数据进行操作的最小单位,它定义了需要在输入数据上执行的操作类型、参数设置和输出结果。通过并行执行多个Task,Spark可以高效地处理大规模的数据集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值