《Spark 官方文档》监控和工具

标签: spark | 发表时间:2016-04-12 12:57 | 作者:邓 林
出处:http://ifeve.com
spark-1.6.0  原文地址

监控和工具

监控Spark应用有很多种方式:web UI,metrics 以及外部工具。

Web界面

每个SparkContext都会启动一个web UI,其默认端口为4040,并且这个web UI能展示很多有用的Spark应用相关信息。包括:

  • 一个stage和task的调度列表
  • 一个关于RDD大小以及内存占用的概览
  • 运行环境相关信息
  • 运行中的执行器相关信息

你只需打开浏览器,输入 http://<driver-node>:4040 即可访问该web界面。如果有多个SparkContext在同时运行中,那么它们会从4040开始,按顺序依次绑定端口(4041,4042,等)。

注意,默认情况下,这些信息只有在Spark应用运行期内才可用。如果需要在Spark应用退出后仍然能在web UI上查看这些信息,则需要在应用启动前,将 spark.eventLog.enabled 设为 true。这项配置将会把Spark事件日志都记录到持久化存储中。

事后查看

Spark独立部署时,其对应的集群管理器也有其对应的  web UI。如果Spark应用将其运行期事件日志保留下来了,那么独立部署集群管理器对应的web UI将会根据这些日志自动展示已经结束的Spark应用。

如果Spark是运行于Mesos或者YARN上的话,那么你需要开启Spark的history server,开启event log。开启history server需要如下指令:

  ./sbin/start-history-server.sh

如果使用file-system provider class(参考下面的 spark.history.provider),那么日志目录将会基于 spark.history.fs.logDirectory 配置项,并且在表达Spark应用的事件日志路径时,应该带上子目录。history server对应的web界面默认在这里 http://<server-url>:18080。同时,history server有一些可用的配置如下:

环境变量 含义
SPARK_DAEMON_MEMORY history server分配多少内存(默认: 1g)
SPARK_DAEMON_JAVA_OPTS history server的 JVM参数(默认:none)
SPARK_PUBLIC_DNS history server的外部访问地址,如果不配置,那么history server有可能会绑定server的内部地址,这可能会导致外部不能访问(默认:none)
SPARK_HISTORY_OPTS history server配置项(默认:none):spark.history.*
属性名称 默认值 含义
spark.history.provider org.apache.spark.deploy
.history.FsHistoryProvider
Spark应用历史后台实现的类名。目前可用的只有spark自带的一个实现,支持在本地文件系统中查询应用日志。
spark.history.fs.logDirectory file:/tmp/spark-events history server加载应用日志的目录
spark.history.fs.update.interval 10s history server更新信息的时间间隔。每次更新将会检查磁盘上的日志是否有更新。
spark.history.retainedApplications 50 UI上保留的spark应用历史个数。超出的将按时间排序,删除最老的。
spark.history.ui.port 18080 history server绑定的端口
spark.history.kerberos.enabled false history server是否启用kerberos验证登陆。如果history server需要访问一个需要安全保证的hadoop集群,则需要开启这个功能。该配置设为true以后,需要同时配置 spark.history.kerberos.principal 和 spark.history.kerberos.keytab
spark.history.kerberos.principal (none) 登陆history server的kerberos 主体名称
spark.history.kerberos.keytab (none) history server对应的kerberos keytab文件路径
spark.history.ui.acls.enable false 指定是否启用ACL以控制用户访问验证。如果启用,那么不管某个应用是否设置了 spark.ui.acls.enabled,访问控制都将检查用户是否有权限。Spark应用的owner始终有查看的权限,而其他用户则需要通过 spark.ui.view.acls 配置其访问权限。如果禁用,则不会检查访问权限。
spark.history.fs.cleaner.enabled false 指定history server是否周期性清理磁盘上的event log
spark.history.fs.cleaner.interval 1d history server清理磁盘文件的时间间隔。只会清理比 spark.history.fs.cleaner.maxAge 时间长的磁盘文件。
spark.history.fs.cleaner.maxAge 7d 如果启用了history server周期性清理,比这个时间长的Spark作业历史文件将会被清理掉

注意,所有web界面上的 table 都可以点击其表头来排序,这样可以帮助用户做一些简单分析,如:发现跑的最慢的任务、数据倾斜等。

注意history server 只展示已经结束的Spark作业。一种通知Spark作业结束的方法是,显式地关闭SparkContext(通过调用 sc.stop(),或者在 使用 SparkContext() 处理其 setup 和 tear down 事件(适用于python),然后作业历史就会出现在web UI上了。

REST API

度量信息除了可以在UI上查看之外,还可以以JSON格式访问。这能使开发人员很容易构建新的Spark可视化和监控工具。JSON格式的度量信息对运行中的Spark应用和history server中的历史作业均有效。其访问端点挂载在 /api/v1 路径下。例如,对于history server,一般你可以通过 http://<server-url>:18080/api/v1 来访问,而对于运行中的应用,可以通过 http://localhost:4040/api/v1 来访问。

端点 含义
/applications 所有应用的列表
/applications/[app-id]/jobs 给定应用的全部作业列表
/applications/[app-id]/jobs/[job-id] 给定作业的细节
/applications/[app-id]/stages 给定应用的stage列表
/applications/[app-id]/stages/[stage-id] 给定stage的所有attempt列表
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id] 给定attempt的详细信息
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskSummary 指定attempt对应的所有task的概要度量信息
/applications/[app-id]/stages/[stage-id]/[stage-attempt-id]/taskList 指定的attempt的所有task的列表
/applications/[app-id]/executors 给定应用的所有执行器
/applications/[app-id]/storage/rdd 给定应用的已保存的RDD列表
/applications/[app-id]/storage/rdd/[rdd-id] 给定的RDD的存储详细信息
/applications/[app-id]/logs 将给定应用的所有attempt对应的event log以zip格式打包下载
/applications/[app-id]/[attempt-id]/logs 将给定attempt的所有attempt对应的event log以zip格式打包下载

如果在YARN上运行,每个应用都由多个attempts,所以 [app-id] 实际上是 [app-id]/[attempt-id]。

这些API端点都有版本号,所以基于这些API开发程序就比较容易。Spark将保证:

  • 端点一旦添加进来,就不会删除
  • 某个端点支持的字段永不删除
  • 未来可能会增加新的端点
  • 已有端点可能会增加新的字段
  • 未来可能会增加新的API版本,但会使用不同的端点(如:api/v2 )。但新版本不保证向后兼容。
  • API版本可能会整个丢弃掉,但在丢弃前,一定会和新版本API共存至少一个小版本。

注意,在UI上检查运行中的应用时,虽然每次只能查看一个应用, 但applicatoins/[app-id] 这部分路径仍然是必须的。例如,你需要查看运行中应用的作业列表时,你需要输入 http://localhost:4040/api/v1/applications/[app-id]/jobs。虽然麻烦点,但这能保证两种模式下访问路径的一致性。

度量

Spark的度量子系统是可配置的,其功能是基于 Coda Hale Metrics Library开发的。这套度量子系统允许用户以多种形式的汇报槽(sink)汇报Spark度量信息,包括:HTTP、JMX和CSV文件等。其对应的配置文件路径为:${SPARK_HOME}/conf/metrics.properties。当然,你可以通过spark.metrics.conf 这个Spark属性来自定义配置文件路径(详见 configuration property)。Spark的各个组件都有其对应的度量实例,且这些度量实例之间是解耦的。这些度量实例中,你都可以配置一系列不同的汇报槽来汇报度量信息。以下是目前支持的度量实例:

  • master: 对应Spark独立部署时的master进程。
  • applications: master进程中的一个组件,专门汇报各个Spark应用的度量信息。
  • worker: 对应Spark独立部署时的worker进程。
  • executor: 对应Spark执行器。
  • driver: 对应Spark驱动器进程(即创建SparkContext对象的进程)。

每个度量实例可以汇报给0~n个槽。以下是目前 org.apache.spark.metrics.sink 包中包含的几种汇报槽(sink):

  • ConsoleSink:将度量信息打印到控制台。
  • CSVSink: 以特定的间隔,将度量信息输出到CSV文件。
  • JmxSink: 将度量信息注册到JMX控制台。
  • MetricsServlet: 在已有的Spark UI中增加一个servlet,对外提供JSON格式的度量数据。
  • GraphiteSink: 将度量数据发到Graphite 节点。
  • Slf4jSink: 将度量数据发送给slf4j 打成日志。

Spark同样也支持Ganglia,但因为license限制的原因没有包含在默认的发布包中:

  • GangliaSink: 将度量信息发送给一个Ganglia节点或者多播组。

如果需要支持GangliaSink的话,你需要自定义Spark构建包。 注意,如果你包含了GangliaSink代码包的话,就必须同时将  LGPL -licensed 协议包含进你的Spark包中。对于sbt用户,只需要在编译打包前设置好环境变量:SPARK_GANGLIA_LGPL即可。对于maven用户,启用 -Pspark-ganglia-lgpl 即可。另外,除了修改集群的Spark之外,用户程序还需要链接 spark-ganglia-lgpl 工件。

度量系统配置文件语法可以参考这个配置文件示例:${SPARK_HOME}/conf/metrics.properties.template

高级工具

以下是几个可以用以分析Spark性能的外部工具:

  • 集群整体监控工具,如: Ganglia,可以提供集群整体的使用率和资源瓶颈视图。比如,Ganglia的仪表盘可以迅速揭示出整个集群的工作负载是否达到磁盘、网络或CPU限制。
  • 操作系统分析工具,如: dstatiostat, 以及  iotop ,可以提供单个节点上细粒度的分析剖面。
  • JVM工具可以帮助你分析JVM虚拟机,如:jstack可以提供调用栈信息,jmap可以转储堆内存数据,jstat可以汇报时序统计信息,jconsole可以直观的探索各种JVM属性,这对于熟悉JVM内部机制非常有用。

原创文章,转载请注明: 转载自 并发编程网 – ifeve.com 本文链接地址: 《Spark 官方文档》监控和工具


相关 [spark 官方 文档] 推荐:

《Spark 官方文档》监控和工具

- - 并发编程网 - ifeve.com
spark-1.6.0  原文地址. 监控Spark应用有很多种方式:web UI,metrics 以及外部工具. 每个SparkContext都会启动一个web UI,其默认端口为4040,并且这个web UI能展示很多有用的Spark应用相关信息. 一个stage和task的调度列表. 一个关于RDD大小以及内存占用的概览.

Azkaban2官方配置文档

- - CSDN博客云计算推荐文章
最近工作实在是太忙了,我把之前翻译的官方的文档先放上来吧,希望对大家有所帮助~. 3、更容易设置job的依赖关系. 6、Kill和restart工作流. 8、日志和设计工作流和job. Azkaban2是相当容易搭建的,尽管它比azkaban要进行更多的插件组装. 在Azkaban2中有两个server和一个数据库需要搭建:.

Spark概览

- - 简单文本
Spark具有先进的DAG执行引擎,支持cyclic data flow和内存计算. 因此,它的运行速度,在内存中是Hadoop MapReduce的100倍,在磁盘中是10倍. 这样的性能指标,真的让人心动啊. Spark的API更为简单,提供了80个High Level的操作,可以很好地支持并行应用.

Spark与Mapreduce?

- - 崔永键的博客
我本人是类似Hive平台的系统工程师,我对MapReduce的熟悉程度是一般,它是我的底层框架. 我隔壁组在实验Spark,想将一部分计算迁移到Spark上. 年初的时候,看Spark的评价,几乎一致表示,Spark是小数据集上处理复杂迭代的交互系统,并不擅长大数据集,也没有稳定性. 但是最近的风评已经变化,尤其是14年10月他们完成了Peta sort的实验,这标志着Spark越来越接近替代Hadoop MapReduce了.

Spark迷思

- - ITeye博客
目前在媒体上有很大的关于Apache Spark框架的声音,渐渐的它成为了大数据领域的下一个大的东西. 证明这件事的最简单的方式就是看google的趋势图:. 上图展示的过去两年Hadoop和Spark的趋势. Spark在终端用户之间变得越来越受欢迎,而且这些用户经常在网上找Spark相关资料. 这给了Spark起了很大的宣传作用;同时围绕着它的也有误区和思维错误,而且很多人还把这些误区作为银弹,认为它可以解决他们的问题并提供比Hadoop好100倍的性能.

Spark 优化

- - CSDN博客推荐文章
提到Spark与Hadoop的区别,基本最常说的就是Spark采用基于内存的计算方式,尽管这种方式对数据处理的效率很高,但也会往往引发各种各样的问题,Spark中常见的OOM等等. 效率高的特点,注定了Spark对性能的严苛要求,那Spark不同程序的性能会碰到不同的资源瓶颈,比如:CPU,带宽、内存.

Spark&Spark性能调优实战

- - CSDN博客互联网推荐文章
       Spark特别适用于多次操作特定的数据,分mem-only和mem & disk. 其中mem-only:效率高,但占用大量的内存,成本很高;mem & disk:内存用完后,会自动向磁盘迁移,解决了内存不足的问题,却带来了数据的置换的消费. Spark常见的调优工具有nman、Jmeter和Jprofile,以下是Spark调优的一个实例分析:.

Mesos上部署spark

- - 开源小站
还是回到之前一直持续的 Mesos话题. 在之前的环节里,我们已经尝试了Mesos的安装,Marathon守护服务以及相对比较主流的Mesos作为Hadoop的资源管理器的实际操作. 这次就说说同属于伯克利出品的Spark. 其实spark最初0.7以前的版本还没有自己的资源管理系统,资源的调度都是通过Mesos来执行的.

Spark容错机制

- - zzm
一般来说,分布式数据集的容错性有两种方式: 数据检查点和记录数据的更新. 面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源. 因此,Spark选择记录更新的方式. 但是,如果更新粒度太细太多,那么记录更新成本也不低.

beeline 连接SPARK /Hive

- - 开源软件 - ITeye博客
hiveclient所在主机的jdk 1.7_51,hive 0.12和hadoop 2.3.0是从服务器端拷贝过来的,环境变量一切OK. 执行连接报了Invalid URL的错误:. 开始的一段时间都在纠结这个jdbc的URL格式问题,后来在cloudra论坛上找到了一个方法,. 直接调用的jdbc:hive2的驱动测试是正常的,证明CLASSPATH等环境变量没有问题.