我为Spark结构化流创建了一个“自定义流”选项卡。我刚刚在Spark UI中附加了流式标签,但无法在流式标签中附加页面。在此自定义选项卡中,我想显示完成了多少批次,每批次收到的消息数,处理时间及其图表。通过SQL侦听器和StreamingQueryListener,我可以获取信息并希望在流选项卡中添加。
public class CustomTab extends SparkUITab {
public CustomTab(SparkUI parent, String prefix) {
super(parent, prefix);
}
public static void getCustomTab(JobContext jobcontext) {
SparkContext sparkContext = jobcontext.getSparkSession().sparkContext();
StreamingContext ssc = new StreamingContext(sparkContext, new Duration(1000));
StreamingTab streamingTab = new StreamingTab(ssc);
sparkContext.ui().get().attachPage(new CustomPage("customPage", streamingTab));
if (sparkContext.ui().isDefined()) {
sparkContext.ui().get().attachTab(streamingTab);
}
}
}
在自定义流式传输标签中附加customPage时遇到问题。 SparkUI不会调用SparkUITab的render方法。 我得到的第二个问题是如何在Java中更改scala.xml.Node类。我的意思是我可以使用Java中的任何类代替Node类,或者如何在scala.xml.Node中添加String。
如果我可以使用任何Java类,那么如何更改回Node Seq。
class CustomPage extends WebUIPage {
StreamingTab streamingTab = null;
public CustomPage(String prefix, StreamingTab sparkUI) {
super(prefix);
this.streamingTab = sparkUI;
}
@Override
public Seq<Node> render(HttpServletRequest request) {
System.out.println("In render method");
String value = "This text is going to come at the bottom";
Option<String> optionSome = Option.apply(value);
Function0<Seq<Node>> length = new AbstractFunction0<Seq<Node>>() {
@Override
public Seq<Node> apply() {
scala.xml.Node node = null;
// I am not getting that how to add html code("<div> { <div id=\"custommmmmm\"></div> } </div>") here
return null;
}
};
return UIUtils.headerSparkPage("custom", length, this.streamingTab, null, optionSome, false, false);
}
}
是否可以通过侦听器显示结构化的流批处理,其处理时间以及每批的行数,如果可能的话,那么我应该使用哪个侦听器以及如何在自定义页面中添加它。
答案 0 :(得分:0)
您可以在用例中使用StreamingQueryListener。您必须保留从StreamingQueryListener获得的数据,然后才能在“自定义”标签中显示它们。