Open teeyog opened 6 years ago
你好.我按照你的方法: executor端: Caused by: java.lang.ClassNotFoundException: org.apache.spark.metrics.sink.KafkaSink 找不到对应的类,但是在driver端是好的, 请问,知道这块的原因嘛?
我也遇到了同样的问题,请问如何解决呢
@a741968704 @chensi2017 我这边是有个专门对spark进行扩展的项目,直接打包添加到每台节点上并添加到classpath来使用的。
@teeyog 您是将这个类单独打包了,然后放到每一台节点上面?
@chensi2017 是的,只要添加到classpath能让程序访问到就行。
@teeyog 已解决,非常感谢!
背景
监控是Spark非常重要的一部分。Spark的运行情况是由ListenerBus以及MetricsSystem 来完成的。通过Spark的Metrics系统,我们可以把Spark Metrics的收集到的信息发送到各种各样的Sink,比如HTTP、JMX以及CSV文件。 目前支持的Sink包括:
有时我们需要实时获取metrics数据通过spark分析展示等需求,这个时候若有个KafkaSink将metrics指标数据实时往kafka发送那就太方便了,故有了这篇博文。
实践
所有的Sink都需要继承Sink这个特质:
当该Sink注册到metrics系统中时,会调用start方法进行一些初始化操作,再通过report方式进行真正的输出操作,stop方法可以进行一些连接关闭等操作。直接上代码:
KafkaReporter类:
其中的report方法就是获取各种类型指标,并进行对应的输出操作的时机。
如何使用
可在配置文件或者程序中设定需要注册的sink,并带上对应的参数即可: