写个yarn的监控

在星球里和微信群里很多朋友都有疑惑,如何监控 yarn 上 spark 或者 mr 应用的存活状态,浪尖今天在这里分享一下实现方法,实际上只需要简单的几行代码即可。

首先是,pom文件,添加yarn相关的配置

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>2.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-yarn-api -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-api</artifactId>
      <version>2.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-yarn-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-client</artifactId>
      <version>2.7.4</version>
    </dependency>

接着将yarn-site.xml配置文件放到resources目录下:

具体实现代码其实很简单就是,通过yarnclient获取resourcemanager上 spark 或者 mapreduce的状态。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.client.api.YarnClient;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.YarnException;

import java.io.IOException;
import java.util.EnumSet;
import java.util.List;


public class client {
    public static void main(String[] args){
        Configuration conf = new YarnConfiguration();
        YarnClient yarnClient = YarnClient.createYarnClient();
        yarnClient.init(conf);
        yarnClient.start();
        try {
            List<ApplicationReport> applications = yarnClient.getApplications(EnumSet.of(YarnApplicationState.RUNNING, YarnApplicationState.FINISHED));
            System.out.println("ApplicationId ============> "+applications.get(0).getApplicationId());
            System.out.println("name ============> "+applications.get(0).getName());
            System.out.println("queue ============> "+applications.get(0).getQueue());
            System.out.println("queue ============> "+applications.get(0).getUser());
        } catch (YarnException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        yarnClient.stop();
    }
}

可以看到,我们可以通过YarnApplicationState设置状态,来过滤调一些我们不需要的任务状态。状态列表如下:

public enum YarnApplicationState {
  /** Application which was just created. */
  NEW,

  /** Application which is being saved. */
  NEW_SAVING,

  /** Application which has been submitted. */
  SUBMITTED,

  /** Application has been accepted by the scheduler */
  ACCEPTED,

  /** Application which is currently running. */
  RUNNING,

  /** Application which finished successfully. */
  FINISHED,

  /** Application which failed. */
  FAILED,

  /** Application which was terminated by a user or admin. */
  KILLED
}

上述demo监控的是spark streaming 的状态,运行结果如下:

这样,我们通过app name字段可以获取到存活的 spark 等任务,然后通过比对我们要监控的任务列表,不存在的发出告警即可。

对于 spark streaming 或者 spark其他任务,可以通过一个配置来制定spark 任务在yarn上显示的name,设置的参数是

new SparkConf().setAppName(this.getClass.getName)

this.getClass.getName该方式在yarn-client和 yarn-cluster有稍微的区别,具体可以测一下。

类名作为spark app的 name 还是很方便及便于识别的。

本文分享自微信公众号 - Spark学习技巧(bigdatatip)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于Canal与Flink实现数据实时增量同步(二)

    在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据。在互联网企业中,常见的ODS数据有业务...

    Spark学习技巧
  • hadoop系列之MR经典案例分享二

    4、MapReduce的join(hive已经实现) http://database.51cto.com/art/201410/454277.htm ? 这三种...

    Spark学习技巧
  • Flink计算PV,UV的案例及问题分析

    PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。

    Spark学习技巧
  • Eclipse连接Hadoop集群和WordCount实战

    本文将主要介绍Eclipse连接Hadoop集群和WordCount实践项目两大内容。

    挖掘大数据
  • BloomFilter 简介及在 Hadoop reduce side join 中的应用

    1、BloomFilter能解决什么问题?      以少量的内存空间判断一个元素是否属于这个集合, 代价是有一定的错误率 2、工作原理 ...

    用户1177713
  • Hadoop阅读笔记(一)——强大的MapReduce

    前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚。可是.....

    JackieZheng
  • 如何使用HBase存储图片

    Fayson
  • 跟着实例学习ZooKeeper的用法: 计数器

    这一篇文章我们将学习使用Curator来实现计数器。 顾名思义,计数器是用来计数的, 利用ZooKeeper可以实现一个集群共享的计数器。 只要使用相同的pat...

    用户1263954
  • 大厂程序员为了更好的满足历史数据的保存和检索往往选择这种神操作!

    ElasticSearch是一款开源的非常火爆的文档索引引擎, 大小公司都比较青睐的一款做日志检索、分析、查询的工具。

    云存储
  • 使用Java 操作MinIO

    MinIO 是一款高性能、分布式的对象存储系统。它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。MinIO与传...

    JAVA日知录

扫码关注云+社区

领取腾讯云代金券