我已经为我的Spark流媒体应用编写了我的自定义指标源/接收器,我正在尝试从metrics.properties初始化它 - 但是这不适用于执行程序。我无法控制Spark集群中的计算机,因此无法在集群中的$ SPARK_HOME / conf /中复制属性文件。我把它放在我的应用程序所在的胖罐中,但是当我的胖罐被下载到集群中的工作节点时,执行器已经启动并且它们的度量系统已经初始化 - 因此不会选择其中包含自定义源配置的文件
在post之后,我已经指定了“spark.files = metrics.properties”和“spark.metrics.conf = metrics.properties”,但是当'metrics.properties'被发送到执行者,他们的度量系统已经初始化。
如果我初始化我自己的指标系统,它正在拿起我的文件,但后来我缺少主/执行程序级指标/属性(例如,executor.sink.mySink.propName = myProp - 无法读取'propName'来自'mySink')因为它们是Spark的度量系统initialized。
是否有(程序化的)方式在执行者initialize之前发布'metrics.properties'吗?
Update1:我在独立的Spark 2.0.0集群上尝试这个
Update2:想到实现这个目标 - 在开始你的'实际'火花工作之前,开始一个虚拟工作来复制每个工人的metrics.properties。然后使用预先知道的文件位置开始您的实际工作。缺点 - 如果一个工人死亡而另一个工人占据了它的位置,它将不会在预先知道的路径中拥有该文件。解决方案替代方案 - 当新的工作机器启动时,它也会从您的git-repo中提取metrics.properties并将其置于预先知道的路径中。虽然它可能有用,但它非常hacky,而且首选的解决方案是让Spark在内部支持它。
答案 0 :(得分:1)
见Spark metrics on wordcount example 基本上我认为你需要添加--files来将metrics.properties发送给所有工作人员
答案 1 :(得分:1)
SparkConf only load local system properties if they start with the prefix spark.,您是否有托盘加载属性添加火花?