Spark之MetricsSystem

1.看启动start方法,spark中有哪些类调用了MetricsSystem类的start方法

  SparkEnv,Master,SparkContext,Worker,ExternalShuffleService,主要讲ExternalShuffleService

  ExternalShuffleService:这个类的作用是提供一个服务来读取shuffle程序,可以防止executor挂掉的时候还在不间断的访问文件。

这个类是如何添加度量系统的呢?

直接创建了通过MetricsSystem类创建了MetricsSystem

 protected val masterMetricsSystem = MetricsSystem.createMetricsSystem("shuffleService", sparkConf, securityManager)

private val enabled = sparkConf.getBoolean("spark.shuffle.service.enabled", false)
private val port = sparkConf.getInt("spark.shuffle.service.port", 7337)
private val useSasl: Boolean = securityManager.isAuthenticationEnabled()默认为false通过spark.authenticate配置可调

start方法:

masterMetricsSystem.registerSource(shuffleServiceSource)

masterMetricsSystem.start()

注册这个做了什么操作呢?

又调用了MetricsSystem的registerSource方法

def registerSource(source: Source) {
//这个sources是一个lists的Source,那Source是什么?
//静态就是资源名字,动态方面,对于spark而言资源就是各个监听对我的反馈大小等信息。
  sources += source
  try {
    val regName = buildRegistryName(source)
//注册可以理解为实际是初始化操作
    registry.register(regName, source.metricRegistry)
  } catch {
    case e: IllegalArgumentException => logInfo("Metrics already registered", e)
  }
}

上面代码主要关注private val blockHandler = newShuffleBlockHandler(transportConf)

这个方法产生了什么?

产生了new ExternalShuffleBlockHandler(conf, null)

又调用了

this(new OneForOneStreamManager(),
  new ExternalShuffleBlockResolver(conf, registeredExecutorFile));

主要看这个ExternalShuffleBlockResolver做了啥?构造了一个ExternalShuffleBlockHandler对象

添加了度量的定义

注册上

调用start方法

全部注册上:

很多的实现都会被注册上

就可以调用一下方法进行度量一些值

下面是一个demo生成CSV的

//MetricRegistry这个类主要是一个Metric,MetricRegistryListener集合
private final static MetricRegistry registry=  new MetricRegistry();
private static volatile int i=10;
public  static  void handleRequest() {
    registry.register(MetricRegistry.name("memory", "maxMem_MB"),  new Gauge<Integer>() {
        @Override
        public Integer getValue() {
            int res=i/13;
            System.out.println("---"+res);
            return res;
        }});
}
public static void main(String[] args) throws InterruptedException {
    Thread thread=new Thread(new Runnable() {
        @Override
        public void run() {
            CsvTest.handleRequest();
            while (true){
                i+=1;
            } }});
    thread.start();
 CsvReporter csvReporter = CsvReporter.forRegistry(registry)
            .formatFor(Locale.CHINA)
            .convertDurationsTo(TimeUnit.MILLISECONDS)
            .convertRatesTo(TimeUnit.SECONDS)
            .build(new File("D:\\img"));
    csvReporter.start(1, TimeUnit.SECONDS);
}
这个工具的主要架构后面讲解

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值