Spark测量系统 MetricsSystem

Spark测量系统,由指定的instance创建,由source、sink组成,周期性地从source获取指标然后发送到sink,其中instance、source、sink的概念如下:

Instance:指定了谁在使用测量系统,在spark中有一些列如master、worker、executor、client driver这些角色,这些角色创建测量系统用于监控spark状态,目前在spark中已经实现的角色包括master、worker、executor、driver、applications

Source:指定了从哪里收集测量数据。在Spark测量系统中有两种来源:

(1) Spark内部指标,比如MasterSource、WorkerSource等,这些源将会收集Spark组件的内部状态

(2) 普通指标,比例JvmSource,通过配置文件进行配置

Sink:指定了往哪里输出测量数据


private[spark] class MetricsSystem private (
    val instance: String,
    conf: SparkConf,
    securityMgr: SecurityManager)
  extends Logging {

  private[this] val confFile = conf.get("spark.metrics.conf", null)
  private[this] val metricsConfig = new MetricsConfig(Option(confFile))

  private val sinks = new mutable.ArrayBuffer[Sink]
  private val sources = new mutable.ArrayBuffer[Source]
  private val registry = new MetricRegistry()

MetricsSystem的启动过程包括以下步骤:

1) 注册Sources;

2) 注册Sinks;

3) 给Sinks增加Jetty的ServletContextHandler。

 

注册Sources

registerSources方法用于注册Sources,告诉测量系统从哪里收集测量数据,注册Sources的过程分为以下步骤:

1) 从metricsConfig获取Driver的Properties。

2) 用正则匹配Driver的Properties中以source.开头的属性。然后将属性中的Source反射得到的实例加入ArrayBuffer[Source]

3) 将每个souce的metricsRegistry注册到ConcurrentMap metrics。

private def registerSources() {
  val instConfig = metricsConfig.getInstance(instance)
  val sourceConfigs = metricsConfig.subProperties(instConfig, MetricsSystem.SOURCE_REGEX)

  // Register all the sources related to instance
  sourceConfigs.foreach { kv =>
    val classPath = kv._2.getProperty("class")
    try {
      val source = Class.forName(classPath).newInstance()
      registerSource(source.asInstanceOf[Source])
    } catch {
      case e: Exception => logError("Source class " + classPath + " cannot be instantiated", e)
    }
  }
}

注册Sinks

registerSinks方法用于注册Sinks,即告诉测量系统MetricsSystem往哪里输出测量数据,注册Sinks的步骤如下:

1) 从Driver的Properties中用正则匹配以sink.开头的属性。

2) 将子属性class对应的类metricsServlet反射得到MetricsServlet实例。如果属性的key是servlet,将其设置为metricsServlet;如果是Sink,则加入到ArrayBuffer[Sink]中。

private def registerSinks() {
  val instConfig = metricsConfig.getInstance(instance)
  val sinkConfigs = metricsConfig.subProperties(instConfig, MetricsSystem.SINK_REGEX)

  sinkConfigs.foreach { kv =>
    val classPath = kv._2.getProperty("class")
    if (null != classPath) {
      try {
        val sink = Class.forName(classPath)
          .getConstructor(classOf[Properties], classOf[MetricRegistry], classOf[SecurityManager])
          .newInstance(kv._2, registry, securityMgr)
        if (kv._1 == "servlet") {
          metricsServlet = Some(sink.asInstanceOf[MetricsServlet])
        } else {
          sinks += sink.asInstanceOf[Sink]
        }
      } catch {
        case e: Exception => {
          logError("Sink class " + classPath + " cannot be instantialized")
          throw e
        }
      }
    }
  }
}

给Sinks增加Jetty的ServletContextHandler

为了能够在SparkUI访问到测量数据,所以需要给Sinks增加Jetty的ServletContextHandler,主要用MetricsSystem得getServletHandlers方法实现。

/**
 * Get any UI handlers used by this metrics system; can only be called after start().
 */
def getServletHandlers: Array[ServletContextHandler] = {
  require(running, "Can only call getServletHandlers on a running MetricsSystem")
  metricsServlet.map(_.getHandlers).getOrElse(Array())
}



参考文章链接:http://blog.sina.com.cn/s/blog_9ca9623b0102weqi.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark生态系统是一个开源的大数据处理框架,它提供了一系列的工具和库,用于处理和分析大规模数据集。以下是Spark生态系统的一些核心组件和相关工具: 1. Apache SparkSpark是一个快速、通用的大数据处理引擎,它支持分布式数据处理和分析。Spark提供了高级API(如Spark SQL、Spark Streaming、MLlib和GraphX)和低级API(如RDD)来处理结构化和非结构化数据。 2. Spark SQL:Spark SQL是Spark的模块之一,它提供了用于处理结构化数据的API。它支持SQL查询、DataFrame和DataSet API,并且可以与Hive集成,从而可以使用Hive的元数据和查询语言。 3. Spark Streaming:Spark Streaming是Spark的流处理模块,它可以实时处理数据流。它支持各种数据源(如Kafka、Flume和HDFS)和数据处理操作(如窗口操作和状态管理),使得实时数据处理变得简单而高效。 4. MLlib:MLlib是Spark的机器学习库,它提供了一系列常见的机器学习算法和工具。MLlib支持分类、回归、聚类、推荐和协同过滤等任务,并且可以与Spark的其他组件无缝集成。 5. GraphX:GraphX是Spark的图处理库,它提供了用于图计算和分析的API。GraphX支持图的创建、转换和操作,以及一些常见的图算法(如PageRank和连通性组件)。 6. SparkR:SparkR是Spark的R语言接口,它允许使用R语言进行数据处理和分析。SparkR提供了与Spark SQL和DataFrame API的集成,使得R用户可以利用Spark的分布式计算能力。 7. PySpark:PySparkSpark的Python语言接口,它允许使用Python进行数据处理和分析。PySpark提供了与Spark SQL、DataFrame和MLlib的集成,使得Python用户可以方便地使用Spark进行大数据处理。 8. Spark Packages:Spark Packages是一个开放的社区生态系统,它提供了各种第三方库和工具的集成。通过Spark Packages,用户可以方便地扩展Spark的功能,例如添加新的数据源、算法或可视化工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值