簡體   English   中英

如何訪問Spark Streaming自定義接收器存儲的元數據?

[英]How to access metadata stored by Spark Streaming custom receiver?

Spark Streaming提供了創建自定義接收器的功能,詳見此處 為了將接收器接收的數據存儲到Spark中,需要使用store(data)方法。

我存儲到Spark的數據具有與之關聯的某些屬性。 由自定義接收器擴展的Spark Receiver類提供了表單store(data, metadata)多種存儲方法,這意味着元數據/屬性可以與數據一起存儲。 下面的代碼提取顯示了我如何使用此方法來存儲數據及其元數據/屬性。

public class CustomReceiver extends Receiver<String> {

    public CustomReceiver() {
        super(StorageLevel.MEMORY_AND_DISK_2());
    }

    @Override
    public void onStart() {
        new Thread() {
            @Override
            public void run() {
                try {
                    receive();
                } catch (IOException e) {
                    restart("Error connecting: ", e);
                }
            }
        }.start();
    }

    @Override
    public void onStop() {
        // Not needed as receive() method closes resources when stopped
    }

    private void receive() throws IOException {
        String str = getData();
        Map<String, String> metadata = getMetadata();
        Iterator<String> it = Arrays.asList(str.split("\n\r")).iterator();

        store(it, metadata);

        if (isStopped()) {
            closeConnections();
        }
    }
}

從另一個類訪問此存儲的數據,如以下代碼提取中所示:

private void testCustomReceiver() {
    JavaDStream<String> custom = ssc.receiverStream(new CustomReceiver());

    JavaDStream<String> processedInput = custom.flatMap(row -> {
        return Arrays.asList(row.split("\\r?\\n"));
    });

    processedInput.print();
}

現在我們提出了一個問題 :如何從上面顯示的testCustomReceiver()方法訪問與自定義接收器中的數據一起存儲的元數據/屬性?

我已經嘗試搜索文檔並在調試器中探索JavaDStream對象來搜索元數據,但無濟於事。 非常感謝您對此事的任何幫助或建議,謝謝。

我一直在尋找Spark代碼,我相信你再也無法訪問它了。 事實上,我不相信它曾被使用過。

接收器的主管采用metadataOption並將其放入ReceivedBlockInfo(對org.apache.spark.streaming是私有的)。 從那里開始......無處可去。 我在流代碼庫中找不到ReceivedBlockInfo.metadataOption的引用。 假設有可能將ReceivedBlockInfo序列化然后反序列化為不同的類,或者某些時髦的反射檢索元數據,但這兩者都是這樣的反模式,我不會指望它發生。

為什么會這樣? 我相信它的目的是讓它成為元數據檢查點系統的一部分,但它要么從未被連接過,要么連接到Receiver元數據和流檢查點之間的連接。

無論哪種方式,一旦塊被放入流中,塊元數據就會消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM