来自here。
我在我的应用程序jar中添加了Custom Source和Sink,并找到了在独立群集节点上获取静态固定metrics.properties的方法。当我想启动我的应用程序时,我给出静态路径 - spark.metrics.conf =“/ fixed-path / to / metrics.properties”。尽管我的自定义源/接收器在我的代码/ fat-jar中 - 我在CustomSink上得到了ClassNotFoundException。
我的fat-jar(包含Custom Source / Sink代码)位于hdfs上,对所有人都具有读取权限。
所以这就是我已经尝试过的所有设置(因为执行器在我的应用程序fat-jar中找不到Custom Source / Sink):
这似乎就是这个案例的执行者被初始化的方式(如果我错了请纠正我) -
我的理解是否正确?此外,还有什么我可以尝试的吗?如果有人有自定义源/汇的经验,我们将不胜感激。
答案 0 :(得分:1)
当我需要扩展现有的GraphiteSink
类时,我偶然发现了同一个ClassNotFoundException,这就是我能够解决的方法。
首先,我在CustomGraphiteSink
包中创建了一个org.apache.spark.metrics.sink
类:
package org.apache.spark.metrics.sink;
public class CustomGraphiteSink extends GraphiteSink {}
然后我在metrics.properties
中指定了班级
*.sink.graphite.class=org.apache.spark.metrics.sink.CustomGraphiteSink
并通过以下方式将此文件传递给spark-submit:
--conf spark.metrics.conf=metrics.properties
答案 1 :(得分:0)
为了使用自定义源/接收器,必须使用$val = array_merge($val, $value4old[$i]);
进行分发,并通过spark.executor.extraClassPath