Spark结构化流式用户界面的“自定义”标签

时间:2018-08-24 07:57:14

标签: scala apache-spark spark-structured-streaming

我为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);
}

}

是否可以通过侦听器显示结构化的流批处理,其处理时间以及每批的行数,如果可能的话,那么我应该使用哪个侦听器以及如何在自定义页面中添加它。

1 个答案:

答案 0 :(得分:0)

您可以在用例中使用StreamingQueryListener。您必须保留从StreamingQueryListener获得的数据,然后才能在“自定义”标签中显示它们。