赞
踩
这里是引用
driver节点是整个应用程序的指挥所
指挥官是sparkcontext
环境:构建一个集群
应用程序提交
确定主节点,确定指挥所driver,确定指挥官sparkcontext
sparkcontext会向资源管理器申请资源
会将作业分为不同阶段
将不同任务分到不同节点执行
整个过程还会进行监控
资源管理器收到sparkcontext的资源请求
会向executor分配资源
启动executor进程,才会启动线程
executor进程是驻留在不同的work node中
会有成百上千个进程和work node
sparkcontext对象要根据 rdd依赖关系 构建一个DAG图
代码就是针对RDD一次次的操作
这些操作会被转换成一个有向无环图 dag
DAG会被提交到dag scheduler解析
DAG图会被切为很多个阶段 stage
每个stage又分为若干个任务
每一个阶段stage是任务的集合
把这个阶段stage提交给task scheduler
task scheduler负责分发任务
worker node上的executor会向task scheduler主动申请
task scheduler会返回任务给worker node上的executor去派生线程去执行
计算给节点的分发原则:
计算向数据靠拢。数据在哪个节点上面,task scheduler优先分配,完成本地化的处理。
executor运行的结果会再次反馈给task scheduler
再向上传给 dag scheduler
spark context做最后的处理。返回给用户看或者写入HDFS
sparkcontext:代表了整个应用程序连接集群的通道。链接应用和集群
driver: 该进程调用spark程序的main方法,并且启动sparkcontext
cluster Manager:该进程负责和外部集群工具打交道,申请或释放集群资源
Woker:该进程是一个守护进程,负责启动和管理executor
executor:该进程是一个JVM虚拟机。负责运行spark task
使用线程模拟并行来运行程序
使用集群管理器来和不同类型的集群交互,将任务运行在集群中。
打开spark UI,映入眼帘的是默认的Jobs页面。JObs页面记录着应用中涉及的actions动作,以及与数据读取、移动有关的动作。其中每一个action都对应着一个job,而每一个job都对应着一个作业。我们一会再去对jobs页面做展开,现在先把目光集中在spark ui最上面的导航条,这里面罗列这spark ui的所有一级入口
入口页 | 包含内容。作用 |
---|---|
jobs | actions,以及数据的读取与移动等操作。作业详情预览 |
stages | DAG中每个stage的入口。作业详情预览 |
storage | 分布式数据集缓存(cache)详情页。审查cache在内存与磁盘中的分布情况 |
storage | 分布式数据集缓存(cache)详情页。审查cache在内存与磁盘中的分布情况 |
environment | 配置项,环境变量详情。审查spark配置项是否符合预期 |
executors | 分布式运行环境与计算负载详情页。深入审查执行计划中的每一个环节 |
executor、environment、storage不存在二级入口,但是SQL、storage、JOBs有二级入口
metric | 含义 |
---|---|
RDD | 原始数据集的分区数量 |
storage memory | 用于cache的内存占用 |
disk used | 计算过程中消耗的磁盘空间 |
cores | 用于计算的CPU核数 |
active/failed/complete | total tasks |
task time(GC time) | 任务执行时间(括号内为任务GC时间) |
input | 输入数据量大小 |
shuffle head/write | shuffle读写过程中消耗的数据量 |
logs/thread dump | 日志与core dump |
summary是executors所有指标聚合的情况。
基于这些信息,盘点不同executor之间是否存在负载不均衡的情况、数据倾斜的隐患。
metric | 含义 |
---|---|
runtime information | Java Scala版本号信息 |
spark properties | 所有spark配置项的设置细节,重点 |
Hadoop properties | hadoop配置项细节 |
system properties | 应用提交方法(spark-shell/spark-submit) |
classpath entries | classpath路径设置信息 |
spark任务的各种配置项、判断参数是否合理
不重要
Hadoop的各种配置项
系统配置项,可以看启动命令。sum.java.command
配置、jar包的路径
metric | 含义 |
---|---|
storage level | 存储级别 |
cached partitions | 已缓存的分区数 |
fraction caches | 缓存比例 |
size in memory | 内存大小 |
size on disk | 磁盘大小 |
cached partitions 和fraction caches分别记录着数据集成功缓存的分区数量,以及这些缓存的分区占所有分区的比例。当fraction cached小于100%的时候。说明分布式数据集并没有完全缓存到内存(或是磁盘)。对于这种情况,我们要警惕缓存换入换出可能带来的性能隐患。
基于storage页面提供的详细信息,我们可以有的放失的设置于内存有关的配置项,如spark.executor.memory、spark.executor.fraction、spark.executor.storageFraction、从而有针对性的对storage memory进行调整。
cache partitions 已缓存的分区数
fraction cached。缓存的比例,代表缓存的分区占所有分区的比例,当小于100%的时候,代表分布式的数据没有完全划分到内存或者磁盘里面。
size in memory。内存缓存的大小
size in disk。磁盘缓存的大小
一级入口 | 重点内容 |
---|---|
executors | 不同executors之间,是否存在负载倾斜 |
environment | 不同executors之间,是否存在负载倾斜 |
storage | 分布式数据集的缓存级别,内存,磁盘缓存比例 |
SQL | 初步了解不同执行计划的执行时间,确实是否符合预期 |
jobs | 初步感知不同jobs的执行时间,确实是否符合预期 |
stage | 初步感知不同stage的执行时间,确实是否符合预期 |
metrics | 含义 |
---|---|
shuffle records written | shuffle write阶段写入的数据条目数量 |
shuffle write time total | shuffle write阶段花费的写入时间 |
records read | shuffle read阶段读取的数据条目数量 |
local bytes read total | shuffle read阶段从本地节点读取的数据总量 |
fetch wait time total | shuffle read阶段花费在网络传输上的时间 |
remote bytes read total | shuffle read阶段跨网络、从远端节点读取的数据总量 |
date size total | 原始数据在内存中展开之后的总大小 |
remote bytes read to disk | shuffle read阶段因数据块过大而直接落盘的情况 |
shuffle bytes written total | shuffle中间文件总大小 |
metrics | 含义 |
---|---|
sort time total | 排序消耗的总时间 |
peak memory total | 内存的消耗峰值(集群范围内) |
spill size total | 排序过程中移除到磁盘的数据总量 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。