簡體   English   中英

在本地模式和紗線群集上運行Flink的結果不同

[英]Different result on running Flink in local mode and Yarn cluster

我使用Flink Java API運行代碼,該代碼從Kafka獲取一些字節,然后使用另一種庫靜態方法將其插入Cassandra數據庫中進行解析(解析和插入結果均由該庫完成)。 我在IDE的本地運行代碼,得到了所需的答案,但是在YARN群集上運行時,解析方法未按預期工作!

public class Test {
    static HashMap<Integer, Object> ConfigHashMap = new HashMap<>();

    public static void main(String[] args) throws Exception {

        CassandraConnection.connect();
        Parser.setInsert(true);

        stream.flatMap(new FlatMapFunction<byte[], Void>() {
            @Override
            public void flatMap(byte[] value, Collector<Void> out) throws Exception {
                Parser.parse(ByteBuffer.wrap(value), ConfigHashMap);
                // Parser.parse(ByteBuffer.wrap(value));
            }
        });
        env.execute();
    }
}

Parser類中有一個靜態HashMap字段,解析數據的配置基於其信息,並且數據將在執行期間插入。 在YARN上運行的問題是該數據不適用於taskmanagers而他們只是print config is not available!

因此,我將HashMap重新定義為parse方法的參數,但結果沒有差異!

我該如何解決該問題?

我將靜態方法和字段更改為非靜態,並使用RichFlatMapFunction解決了該問題。

stream.flatMap(new RichFlatMapFunction<byte[], Void>() {
            CassandraConnection con = new CassandraConnection();
            int i = 0 ;

            @Override
            public void open(Configuration parameters) throws Exception {
                super.open(parameters);
                con.connect();
            }

            @Override
            public void flatMap(byte[] value, Collector<Void> out) throws Exception {

                ByteBuffer tb = ByteBuffer.wrap(value);
                np.parse(tb, ConfigHashMap, con);
            }
        });

暫無
暫無

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

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