任务的监控和使用

有几种方式监控spark应用:Web UI,指标和外部方法

Web接口

每个SparkContext都会启动一个web UI,默认是4040端口,用来展示一些信息:

  1. 一系列调度的stage和task
  2. RDD大小和内存的使用概况
  3. 环境变量信息
  4. excutors的相关信息

可以通过http://<driver-node>:4040访问,如果有多个sparkcontext运行在同一个节点,那么端口会依次为4040、4041、4042。

注意这些信息只有在应用执行期间才能看到。如果想要执行完毕查看,那么可以在应用开始前设置spark.eventLog.enabledtrue,这样spark的日志信息会被持久化。

在应用执行结束后查看web UI

当应用执行完毕,可以在Spark History Server上查看日志。可以通过下面的命令启动history server:

./start-history-server.sh

这样默认访问http://<server-url>:18080即可。

如果使用文件系统的provider class(比如spark.history.provider),需要配置spark.history.fs.logDirectory选项。

spark的jobs本身需要配置日志,并且输出到相同的共享、可写目录。比如,下面就把日志输出到hdfs://namenode/shared/spark-logs,client需要增加配置:

spark.eventLog.enabled true
spark.eventLog.dir hdfs://namenode/shared/spark-logs

环境变量

变量 说明
SPARK_DAEMON_MEMORY history server分配的内存
SPARK_DAEMON_JAVA_OPTS JVM选项
SPARK_PUBLIC_DNS 对外的地址,如果没有设置应该是用回环地址,这块没怎么看明白
SPARK_HISTORY_OPTS history server的配置

配置

变量名 默认值 说明
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider history背后的实现类,目前spark就提供这一种,是基于文件系统的
spark.history.fs.logDirectory file:/tmp/spark-events 支持file://或者hdfs://
spark.history.fs.update.interval 10s 这个是服务器刷新的时间,只有服务器这边刷新了,webUI那边才有反应
spark.history.retainedApplications 50 缓存的应用个数,如果超过限制,会从磁盘加载
spark.history.ui.maxApplications Int.MaxValue 概况首页可以显示的应用数量
spark.history.ui.piort 18080 端口号
spark.history.kerberos.enabled false 是否使用kerberos登陆
spark.history.kerberos.principal kerberos不了解
spark.history.kerberos.keytab kerberos不了解
spark.history.ui.acls.enable false acl校验
spark.history.ui.admin.acls empty 可以查看history server的用户,*代表所有用户
spark.history.fs.cleaner.enabled false 是否周期性的清除日志
spark.history.fs.cleaner.interval 1d 多长时间检查一次,应用日志是否清除
spark.history.fs.cleaner.maxAge 7d 超过这个时间的日志会被清除掉
spark.history.fs.numReplayThreads 25% of available cores history server可以用的处理日志的线程数

注意在概况首页,所有的列都可以点击用来排序。

  1. history server可以同时展示完成或者未完成的spark任务。如果应用在失败后有多次尝试,失败的记录也会展示出来。
  2. 未完成的应用需要等待服务器内部刷新。刷新的时间可以通过spark.history.fs.update.interval。如果集群很大,那么刷新时间应该长一点,如果想看实时的数据,可以通过web UI查看
  3. application如果中途直接退出,那么会被标注为未完成。
  4. 想要标记spark为完成状态,需要sc.stop()方法执行

Rest API

另外可以通过UI查看指标。这样可以让开发者很容易的创建一些可视化的工具。这些命令同时也只支持正在运行的应用。对于history server,访问的地址是http://<server-url>:18080/api/v1,对于正在运行的任务,可以访问http://localhost:4040/api/v1

在这些api中,应用的标识为ID[app-id]。当通过YARN启动时,每个应用可能会有多次尝试,只有在cluster模式下才有 应用尝试的id,client模式是没有的。如果是集群模式,那么app-id其实是[base-app-id]/[attempt-id],其中base-app-id是yarn的appid。

?status=[active|complete|pending|failed] 可以列出对应的状态

url 说明
/applications 列出所有的应用。?status=[complete|running]选择对应的状态展示?minDate=[date]显示最小日期的应用,?maxDate=[date]``minEndDate=[date]``?maxEndDate=[date]``?limit=[limit]
/applications/[app-id]/jobs 展示对应的jobs
/applications/[app-id]/jobs/[job-id] job信息
/applications/[app-id]/stages stages信息
/applications/[app-id]/executors excutors信息
/applications/[app-id]/streaming/statistics streaming信息

其他工具

其他相关的性能调优的工具:

  1. 集群监控,可以使用Ganglia
  2. 操作系统监控,可以用dstat, iostat, iotop
  3. JVM可以用jstack, jstat, jconsole

Spark监控官方文档学习笔记的更多相关文章

  1. Spark Streaming官方文档学习--上

    官方文档地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html Spark Streaming是spark ap ...

  2. pm2 官方文档 学习笔记

    一.安装 1.安装 npm install pm2 -g 2.更新 npm install pm2 -g && pm2 update pm2 update 是为了刷新 PM2 的守护进 ...

  3. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  4. Vue2.0 官方文档学习笔记

    VUE2.0官方文档 基础部分: 1.VUE简介 Vue是一个基于MVVM的框架,其中M代表数据处理层,V代表视图层即我们在Vue组件中的html部分,VM即M和V的结合层,处理M层相应的逻辑数据,在 ...

  5. Spark Streaming官方文档学习--下

    Accumulators and Broadcast Variables 这些不能从checkpoint重新恢复 如果想启动检查点的时候使用这两个变量,就需要创建这写变量的懒惰的singleton实例 ...

  6. Vue.js官方文档学习笔记(一)起步篇

    Vue.js起步 Vue.js介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库 ...

  7. Less 官方文档学习笔记

    LESS 是css的一种扩展,它的编辑器是基于node.js 的less.js,将less文件编译成css文件(可压缩). 其中的概念: 变量:定义变量来代替某个值,只能编译一次,本质是“常量”.例如 ...

  8. Vue.js官方文档学习笔记(三)创建Vue实例

    创建Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm=new Vue({ //选项 }) Vue的设计受到了mvvm的启发 当创建一个 Vue 实 ...

  9. Vue.js官方文档学习笔记(二)组件化应用的构建

    组件化应用的构建 组件化应用允许我们使用小型.独立和通常可复用的组件构建大型应用. Vue注册组件 Vue.component('todo-item',{template:'<li>这是个 ...

随机推荐

  1. 初窥c++11:lambda函数及其用法

    转载于:点击打开链接 为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求 ...

  2. 如何编写一个稳定的网络程序(TCP)

    本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一 ...

  3. webrc视频数据发送处理流程详解

  4. 好好写代码吧,没事别瞎B去创业!

    知乎上看到这个问题 正好最近想写篇关于此的文章,于是就回答了一波. 也贴到这里来,回答如下 : 本问题简直为我量身定制,做为一个正在创业中的苦逼少年,说说我是如何从鼓吹怂恿身边人创业转换成反对创业的. ...

  5. Django中多表查询思路

    需求: 1.有一张文章表和一张评论表 2.两张表的关系是一对多 3.规则:若是有新评论,则将对应的文章置顶,若是有新文章则将新文章置顶. 思路: 在文章表中增加一个最后评论时间的字段.然后采用分组排序 ...

  6. window.open()被拦截问题

    最近做项目的时候遇到一个需求,在商品详情页面中点击购买按钮,之后再新标签页中打开生成的订单页面,所以想用window.open()来实现.但是测试的时候发现打开的链接被浏览器拦截. 之后,开始在网上查 ...

  7. backbone与require的共存问题解决

    如果向下面那样直接列出script标签可能会出现错误,   <script type="text/javascript" src="/dep/jquery-1.11 ...

  8. 函数的作用域与this指向 --- 性能篇

    紧接上一篇博文:js函数的作用域与this指向 先来说说this的作用于链,this后的属性或者方法在使用时是先从本实例中查找,如果找到就先返回,如果没找到就接着向上从原型链中查找,如果有多重继承关系 ...

  9. 对deep learning的第一周调研

    下面仅是我的个人认识,说得不正确请轻拍. (眼下,我仅仅看了一些deep learning 的review和TOM Mitchell的书<machine learning>中的神经网络一章 ...

  10. 側滑回退的layout(相似IOS側滑回退到上一个activity)

    用过apple的同学应该都知道,大多数IOS应用都支持側滑回退,就不具体说明了,直接上图: 作为使用ios的android开发人员来说,我是特别喜欢这个功能的.既然这样,那就在android上也实现这 ...