Spark和HDFS的关系

Spark和HDFS的关系

通常,Spark中计算的数据可以来自多个数据源,如Local File、HDFS等。最常用的是HDFS,用户可以一次读取大规模的数据进行并行计算。在计算完成后,也可以将数据存储到HDFS。

分解来看,Spark分成控制端(Driver)和执行端(Executor)。控制端负责任务调度,执行端负责任务执行。

1. 读取文件过程

读取文件的过程如图1 读取文件过程所示。

图1 读取文件过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUMv5Y0C-1692502402108)(F:\【00】SIAT\【03】待办事项\随记\Spark与HDFS和YARN的关系-转载-柳建国-20230820.assets\zh-cn_image_0264278088.png)]

读取文件步骤的详细描述如下所示:

  1. Driver与HDFS交互获取File A的文件信息。
  2. HDFS返回该文件具体的Block信息。
  3. Driver根据具体的Block数据量,决定一个并行度,创建多个Task去读取这些文件Block。
  4. 在Executor端执行Task并读取具体的Block,作为RDD(弹性分布数据集)的一部分。

2. 写入文件过程

写入文件的过程如图2 写入文件过程所示。

图2 写入文件过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6viCyLdZ-1692502402111)(F:\【00】SIAT\【03】待办事项\随记\Spark与HDFS和YARN的关系-转载-柳建国-20230820.assets\zh-cn_image_0264278011.png)]

HDFS文件写入的详细步骤如下所示:

  1. Driver创建要写入文件的目录。
  2. 根据RDD分区分块情况,计算出写数据的Task数,并下发这些任务到Executor。
  3. Executor执行这些Task,将具体RDD的数据写入到步骤1创建的目录下。

3. Spark和YARN的关系

Spark的计算调度方式,可以通过YARN的模式实现。Spark共享YARN集群提供丰富的计算资源,将任务分布式的运行起来。Spark on YARN分两种模式:YARN Cluster和YARN Client。

3.1 YARN Cluster模式

运行框架如图3 Spark on yarn-cluster运行框架所示。

图3 Spark on yarn-cluster运行框架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CAv05BFz-1692502402118)(F:\【00】SIAT\【03】待办事项\随记\Spark与HDFS和YARN的关系-转载-柳建国-20230820.assets\zh-cn_image_0264278095.png)]

Spark on yarn-cluster实现流程:

  1. 首先由客户端生成Application信息,提交给ResourceManager。

  2. ResourceManager为Spark Application分配第一个Container(ApplicationMaster),并在该Container上启动Driver。

  3. ApplicationMaster向ResourceManager申请资源以运行Container。

    ResourceManager分配Container给ApplicationMaster,ApplicationMaster和相关的NodeManager通讯,在获得的Container上启动Executor,Executor启动后,开始向Driver注册并申请Task。

  4. Driver分配Task给Executor执行。

  5. Executor执行Task并向Driver汇报运行状况。

3.2 YARN Client模式

运行框架如图4 Spark on yarn-client运行框架所示。

图4 Spark on yarn-client运行框架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Z3fRFEj-1692502402122)(F:\【00】SIAT\【03】待办事项\随记\Spark与HDFS和YARN的关系-转载-柳建国-20230820.assets\zh-cn_image_0264278058.png)]

Spark on yarn-client实现流程:(说明:在yarn-client模式下,Driver部署在Client端,在Client端启动。yarn-client模式下,不兼容老版本的客户端。推荐使用yarn-cluster模式。)

  1. 客户端向ResourceManager发送Spark应用提交请求,ResourceManager为其返回应答,该应答中包含多种信息(如ApplicationId、可用资源使用上限和下限等)。Client端将启动ApplicationMaster所需的所有信息打包,提交给ResourceManager上。

  2. ResourceManager收到请求后,会为ApplicationMaster寻找合适的节点,并在该节点上启动它。ApplicationMaster是Yarn中的角色,在Spark中进程名字是ExecutorLauncher。

  3. 根据每个任务的资源需求,ApplicationMaster可向ResourceManager申请一系列用于运行任务的Container。

  4. 当ApplicationMaster(从ResourceManager端)收到新分配的Container列表后,会向对应的NodeManager发送信息以启动Container。

    ResourceManager分配Container给ApplicationMaster,ApplicationMaster和相关的NodeManager通讯,在获得的Container上启动Executor,Executor启动后,开始向Driver注册并申请Task。(说明:正在运行的container不会被挂起释放资源。)

  5. Driver分配Task给Executor执行。Executor执行Task并向Driver汇报运行状况。

转载来源

  1. Spark与HDFS和YARN的关系
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值