作者:王畅 整理编辑:Carol

Spark
Apache Spark被广泛认为是大数据行业的未来。自从Apache Spark进入大数据市场以来,它就获得了很多认可。如今,苹果,Facebook,Netflix和Uber等大多数尖端公司已经大规模部署了Spark。在Spark核心数据处理引擎之上,还有用于SQL,机器学习,图形计算和流处理的库,应用程序开发人员和数据科学家将Spark集成到其应用程序中,以**快速地大规模查询,分析和转换数据。**为了更好地了解Spark如何执行Spark / PySpark作业,这些用户界面集派上了用场。

在这篇文章中,我们将了解Spark如何通过使用Spark Web UI中的不同部分来执行此操作

了解spark统一内存管理机制

作为一个 JVM 进程,executor 的内存(堆内内存)管理建立在 JVM 的内存管理之上,此外spark还引入了堆外内存(不在JVM中的内存),在spark中是指不属于executor的内存。

一、内存划分

Spark 1.6 之后引入的统一内存管理机制,与旧版的静态内存管理的区别在于存储内存和执行内存共享同一块空间,可以动态占用对方的空闲区域:

execution内存可借用storage内存中未使用的部分,被借用的storage内存需要等到执行内存的释放方能归还。
storage部分可以借用execution内存,但是 execution 内存的空间被存储内存占用后,是可让对方将占用的部分转存到硬盘,然后“归还”借用的空间。

执行内存(Execution Memory)
主要用于存放Shuffle、Join、Sort、Aggregation等计算过程中的临时数据。

存储内存(Storage Memory)
主要用于spark中数据(RDD)的缓存(cache) 以及 广播数据(broadcast)。

用户内存(User Memory)
主要用于存储RDD 转换操作所需要的数据,例如RDD依赖等信息。

预留内存(Reserved Memory)
系统预留内存,会用来存储Spark内部对象。

二、内存大小分配

usableMemory  = (excutorMemory-reservedMemory)
spark.memory.fraction (Storage 和 Execution 共用内存占可用内存的比例,默认为0.6)
excutionMemory + storageMemory = usableMemory * spark.memory.fraction
spark.memory.storageFraction (Storage内存占 Storage 和 Execution 共用内存比例,默认0.5)
storageMemory  = usableMemory * spark.memory.fraction
* spark.memory.storageFraction
excutionMemory = usableMemory * spark.memory.fraction
*(1- spark.memory.storageFraction)

spark WebUI

应用在创建SparkContext的同时也就创建了web UI 来展示应用的各种信息。Web UI带有以下选项卡(由于它们是按需延迟创建的,因此可能无法一次显示所有选项卡。

一、作业 (job)

Completed Jobs
已完成Job的基本信息,如想查看某一个Job的详细情况,可点击对应Job进行查看。

Active Jobs
正在运行的Job的基本信息。

Event Timeline
在application应用运行期间,Job和Exector的增加和删除事件进行图形化的展现。这个就是用来表示调度job何时启动何时结束,以及Excutor何时加入何时移除。我们可以很方便看到哪些job已经运行完成,使用了多少Excutor,哪些正在运行。

(Job属性列表)

在Jobs页面点击进入某个Job之后即进入JobDetail页面,可以查看某一Job的详细信息。

( job页面信息展示)

Staus
展示Job的当前状态信息。

Active Stages
正在运行的stages信息,点击某个stage可进入查看具体的stage信息。

Pending Stages
排队的stages信息,根据解析的DAG图stage可并发提交运行,而有依赖的stage未运行完时则处于等待队列中。

Completed Stages
已经完成的stages信息。

Event Timeline
展示当前Job运行期间stage的提交与结束、Executor的加入与退出等事件信息。

DAG Visualization
当前Job所包含的所有stage信息(stage中包含的明细的tranformation操作),以及各stage间的DAG依赖图。DAG也是一种调度模型,在spark的作业调度中,有很多作业存在依赖关系,所以没有依赖关系的作业可以并行执行,有依赖的作业不能并行执行。

( job页面信息展示)

二、阶段 (stage)

JobDetail页面中的Stage属性列表:

2. 在Job Detail页点击进入某个stage后,可以查看某一stage的详细信息:

Input Size/Records(表中的Input)
输入的数据字节数大小/记录条数。

Shuffle Write(表中的Shuffle Write)
为下一个依赖的stage提供输入数据,shuffle过程中通过网络传输的数据字节数/记录条数。

DAG Visualization
当前stage中包含的详细的tranformation操作流程图。

Metrics
当前stage中所有task的一些指标(每一指标项鼠标移动上去后会有对应解释信息)统计信息。

Event Timeline
展示在每个Executor上各个task的各个阶段的时间统计信息,可以清楚地看到task任务时间是否有明显倾斜,以及倾斜的时间主要是属于哪个阶段,从而有针对性的进行优化。

Aggregated Metrics by Executor
将task运行的指标信息按excutor做聚合后的统计信息,并可查看某个excutor上任务运行的日志信息。

Tasks
当前stage中所有任务运行的明细信息,是与EventTimeline中的信息对应的文字展示(可以点击某个task查看具体的任务日志)。

(stageDetail信息展示图)

三、存储 (storage)

storage页面能看出application当前使用的缓存情况,可以看到有哪些RDD被缓存了,以及占用的内存资源。如果job在执行时持久化(persist)/缓存(cache)了一个RDD,那么RDD的信息可以在这个选项卡中查看。

点击某个RDD可查看该RDD缓存的详细信息即进入Storage Detail页面,包括缓存在哪个Executor中,使用的block情况,RDD上分区的信息以及存储RDD的主机的地址。

四、环境 (environment)

Environment选项卡提供有关Spark应用程序(或SparkContext)中使用的各种属性和环境变量的信息。用户可以通过这个选项卡得到非常有用的各种Spark属性信息,而不用去翻找属性配置文件。
(环境信息展示)

运行时信息:仅包含运行时属性,例如Java和Scala的版本。
Spark属性:列出应用程序属性,例如“spark.app.name”和“ spark.driver.memory”
Hadoop属性:显示相对于Hadoop和YARN的属性。注意:“spark.hadoop ”之类的属性未在此部分中显示,而是在“spark属性”中显示。
系统属性显:示有关JVM的更多详细信息。
类路径条目:列出从不同来源加载的类,这对于解决类冲突非常有用。

五、执行器 (executors)

Executors选项卡提供了关于内存、CPU核和其他被Executors使用的资源的信息。这些信息在Executor级别和汇总级别都可以获取到。一方面通过它可以看出来每个excutor是否发生了数据倾斜,另一方面可以具体分析目前的应用是否产生了大量的shuffle,是否可以通过数据的本地性或者减小数据的传输来减少shuffle的数据量。

Summary
该application运行过程中使用Executor的统计信息。
Executors
每个Excutor的详细信息(包含driver),可以点击查看某个Executor中任务运行的详细日志。

堆外内存未开启:默认情况下不开启
StorageMemory = (excutorMemory-ReservedMemory) * spark.memory.fraction
堆外内存开启时:spark.memory.offHeap.enabled = true
StorageMemory = (excutorMemory-ReservedMemory) * spark.memory.fraction
+ spark.memory.offHeap.size
注意:
1. Spark的 Executor 端通过 Runtime.getRuntime.maxMemory 拿到的内存其实没
这么大,例如 excutorMemory = 18G ,实际 systemMemory=17179869184 字节。
2. Spark UI 是通过除于1000 的三次方将字节转换成GB,而不是 1024 的三次方。


(executors 信息展示图)

参考文献
1.https://www.iteblog.com/archives/2342.html

2 https://www.pianshen.com/article/7410736178/

3《Spark GraphX实战》

下方扫码推荐进一步阅读:
技术27期:Spark任务调度机制及源码分析

归纳苹果,Facebook大规模部署的Spark-用户界面详细执行操作。相关推荐

  1. CoNEXT 2018:在Facebook上部署IETF QUIC

    在12月初举行的CoNEXT 2018 EPIQ研讨会上来自Facebook的Subodh Iyengar详细介绍了Facebook如何在其基础设施中使用IETF-QUIC,并且通过Android和i ...

  2. 大规模数据处理Apache Spark开发

    大规模数据处理Apache Spark开发 Spark是用于大规模数据处理的统一分析引擎.它提供了Scala.Java.Python和R的高级api,以及一个支持用于数据分析的通用计算图的优化引擎.它 ...

  3. 爱立信与中国联通成功完成国内首个LTE三载波聚合大规模部署测试

    近日,爱立信与中国联通网络技术研究院.联通四川省公司.联通成都市分公司.Qualcomm Incorporated子公司Qualcomm Technologies, Inc.合作成功实现了国内首个三载 ...

  4. 又崩了?苹果发生大规模网络故障:多项服务受影响 目前已恢复

    3月22日消息,针对原神部分用户充值异常的问题,原神官微今日发文称,由于Apple服务异常,部分旅行者出现了游戏充值异常的问题.现在相关服务已恢复. 周一下午晚些时候,苹果发生大规模网络故障,苹果iC ...

  5. 在vSphere上部署通过BOSH工具大规模部署Cloud Foundry-准备IaaS环境

    本文根据Cloud Foundry中国架构师团队的实际部署经验总结而成,共分三个部分. 作者介绍 张轩宁,有多年软件工程的从业经历,在移动应用开发.云应用的架构设计以及软件开发周期管理等方面有着丰富的 ...

  6. 物联网普及 传感器大规模部署是关键

    当今在谈论物联网,其中传感作为物联网核心,数以"亿"计的传感器被嵌入到各种设备中,作为物联网感知层核心部件,由于传感器的部署规模并未普及,使得没有足够的"物理层" ...

  7. Spark最详细安装和介绍--JavaApi!!!!!!!

    Spark概述 Spark官方介绍: Spark是什么? Apache Spark是用于大规模数据处理的统一分析引擎 Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和 ...

  8. oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程

    根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑. Yarn-Client模式的执行流程 Yarn的组成 Yarn是hadoop自带的资源管理框架,它的设计 ...

  9. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

最新文章

  1. 【C++】STL队列和栈的使用
  2. 2014-04-03研究笔记整理
  3. vSphere利用NTP为主机同步时间
  4. 简单几步教你去除开机出现扫描硬盘!
  5. SAP云平台CloudFoundry环境里新建SAP UI5应用后,自动生成了哪些组件
  6. c语言中判断输入是否为数字_C 判断
  7. AT2161-[ARC065D]シャッフル/Shuffling【dp】
  8. mysql“Access denied for user 'root'@'localhost'”问题的解决
  9. 彻底解决zend studio 下 assignment in condition警告
  10. 如何关闭window10自动更新
  11. @Autowired注解能用在static属性吗?autowired注入static属性上为null
  12. 正式开始liunx学习之旅
  13. 软考网络管理员学习笔记1之第一章计算机硬件基础
  14. JSTL (JSP标准标签库)
  15. Servlet 实现訪问量的统计小案例
  16. 请问最早的计算机语言是什么,最早的计算机语言是什么?
  17. OISPT 内网安全项目组A1-渗透测试基础项目训练文档
  18. [ffmpeg][goav]ffmpeg代码例子pcmu重采样并转码aac格式
  19. Alink漫谈(二十二) :源码分析之聚类评估
  20. 五线制交流道岔控制电路故障的处理方法

热门文章

  1. 《评人工智能如何走向新阶段》后记(再续15)
  2. 吴恩达团队:神经网络如何正确初始化?
  3. 如何用Python处理分类和回归问题?附方法和代码
  4. Redis 生产架构选型解决方案
  5. 面试官:什么是NIO?NIO的原理是什么机制?
  6. Kubernetes基础与架构
  7. 【精简教程版】100行代码入手天池CV赛事
  8. 万字长文!线性代数的本质课程笔记完整合集
  9. 剑指offer_第16题_合并两个排序的链表_Python
  10. 进化算法_遗传算法相关资料