2021年大数据Spark(七):应用架构基本了解
Spark 应用架构-了解
Driver 和Executors
从图中可以看到Spark Application运行到集群上时,由两部分组成:Driver Program和Executors。
第一、Driver Program
- 相当于AppMaster,整个应用管理者,负责应用中所有Job的调度执行;
- 运行JVM Process,运行程序的MAIN函数,必须创建SparkContext上下文对象;
- 一个SparkApplication仅有一个;
第二、Executors
- 相当于一个线程池,运行JVM Process,其中有很多线程,每个线程运行一个Task任务,一个Task运行需要1 Core CPU,所有可以认为Executor中线程数就等于CPU Core核数;
- 一个Spark Application可以有多个,可以设置个数和资源信息;
Driver Program是用户编写的数据处理逻辑,这个逻辑中包含用户创建的SparkContext。SparkContext 是用户逻辑与Spark集群主要的交互接口,它会和Cluster Manager交互,包括向它申请计算资源等。 Cluster Manager负责集群的资源管理和调度,现在支持Standalone、Apache Mesos和Hadoop的 YARN。Worker Node是集群中可以执行计算任务的节点。 Executor是在一个Worker Node上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。Task 是被送到某个Executor上的计算单元,每个应用都有各自独立的 Executor,计算最终在计算节点的 Executor中执行。
用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:
1)、用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。 Cluster Manager 会根据用户提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启动 Executor。
2)、Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task组成,这些Task分别作用于待处理数据的不同分区。在阶段划分完成和Task创建后, Driver会向Executor发送 Task;
3)、Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task,并且将Task的运行状态汇报给Driver;
4)、Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle Map Task,它实现数据的重新洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是Result Task,它负责生成结果数据;
5)、Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者超过执行次数的限制仍然没有执行成功时停止;
Job、DAG和Stage
还可以发现在一个Spark Application中,包含多个Job,每个Job有多个Stage组成,每个Job执行按照DAG图进行的。
其中每个Stage中包含多个Task任务,每个Task以线程Thread方式执行,需要1Core CPU。
可以看到Spark为应用程序提供了非常详尽的统计页面,每个应用的Job和Stage等信息都可以在这里查看到。通过观察应用详情页的各个信息,对进一步优化程序,调整瓶颈有着重要作用,后期综合项目案例详细讲解。
Spark Application程序运行时三个核心概念:Job、Stage、Task,说明如下:
- Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一
般来说有多少个 Paritition(物理层面的概念,即分支可以理解为将数据划分成不同
部分并行处理),就会有多少个 Task,每个 Task 只会处理单一分支上的数据。 - Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、collect,后面进一步说明),会生成一个 Job。
- Stage:Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多个 Task 的集合,类似 map 和 reduce stage。
2021年大数据Spark(七):应用架构基本了解相关推荐
- 2021年大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
目录 Kafka快速回顾 消息队列: 发布/订阅模式: Kafka 重要概念: 常用命令 整合说明 两种方式 两个版本API 在实际项目中,无论使用Storm还是SparkStreaming与Flin ...
- 2021年大数据Spark(二十三):SparkSQL 概述
目录 SparkSQL 概述 前世今生 Shark 框架-淘汰了 SparkSQL 模块 Hive 与 SparkSQL 官方定义 第一.针对结构化数据处理,属于Spark框架一个部分 第二.抽象数据 ...
- 2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
目录 案例一:花式查询 案例二:WordCount 基于DSL编程 基于SQL编程 具体演示代码如下: 案例一:花式查询 package cn.itcast.sqlimport org.apache. ...
- 2021年大数据Spark(一):框架概述
目录 Spark框架概述 Spark 是什么 分布式内存迭代计算框架 官方定义: Spark框架概述 Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and Pe ...
- 2021年大数据Spark(三十一):Spark On Hive
目录 Spark On Hive spark-sql中集成Hive Spark代码中集成Hive Spark On Hive Spark SQL模块从发展来说,从Apache Hive框架而来,发展历 ...
- 2021年大数据Spark(五十):Structured Streaming 案例一实时数据ETL架构
目录 案例一 实时数据ETL架构 准备主题 模拟基站日志数据 实时增量ETL 案例一 实时数据ETL架构 在实际实时流式项目中,无论使用Storm.SparkStreami ...
- 2021年大数据Spark(六):环境搭建集群模式 Standalone
目录 环境搭建-Standalone 前言 Standalone 架构 集群规划 修改配置并分发 修改slaves 分发到其他机器 修改spark-env.sh 集群启动和 ...
- 2021年大数据Spark(五十二):Structured Streaming 事件时间窗口分析
目录 事件时间窗口分析 时间概念 event-time 延迟数据处理 延迟数据 Watermarking 水位 官方案例演示 事件 ...
- 2021年大数据Spark(五十一):Structured Streaming 物联网设备数据分析
目录 物联网设备数据分析 设备监控数据准备 创建Topic 模拟数据 SQL风格 DSL风格 物联网设备数据分析 在 ...
最新文章
- taro引入f2图表_Package - taro-f2
- OpenCV椭圆拟合ellipse fitting的实例(附完整代码)
- Linux的Nginx九:负载均衡
- hdu 2553 N皇后问题【dfs】
- 堆叠柱形图上自定义数字_用Excel绘制Cell上的漂亮配图
- linux下安装erlang
- NOIP2016提高组 天天爱跑步
- 关于 JQuery 的克隆
- MapGuide应用开发系列(八)----MapGuide Studio准备地图之地图(Map)
- python怎么理解函数的参数_Python中函数参数理解
- 工程项目成本费用明细表_项目成本费用明细表
- sap hana安装教程
- Morketing Summit 2019“破·局”:有破有立,突破棋局 | MS2019灵眸·全球营销商业峰会全面启动!...
- JAVA 实现《JAVA打砖块》游戏
- AppLocker绕过之路
- python 拟合对数正态分布
- 【毕业设计】flink大数据淘宝用户行为数据实时分析与可视化
- 在VS2017下配置pylon头文件
- 微信小程序入门day1-1
- 大家一起共同学习吖,且行且珍惜
热门文章
- 2022-2028年中国儿童医疗行业深度调研及投资前景预测报告
- 2022-2028年中国瓷砖粘结剂行业市场研究及前瞻分析报告
- Git 常用操作(6)- 推送到远程仓库(git push)删除远程分支(git push origin --delete)
- leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
- learning to rank_排序
- 如何将模糊的扫描版pdf转为清晰的pdf或word_pdf问题小结
- 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
- 大三Java后端暑期实习面经总结——Java容器篇
- 如何写新的Python OP
- GStreamer 1.0 series序列示例