繁体   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