在不提供.jar的情况下在远程群集上运行Flink作业

时间:2018-07-10 22:10:40

标签: java apache-flink

我有以下问题:我想在本地计算机上的IntelliJ中创建Flink作业,然后在VM中的远程群集上运行它。我使用了 createRemoteEnvironment 函数,但是匿名类和lambda表达式都需要jar文件(如果我什么都没错过的话)。是否有一种(或另一种)方法可以在不提供jar文件的情况下在远程集群上运行Flink作业?以下代码是我想在远程群集(没有jar)上运行的简单Flink作业。

public static void main(String[] args) throws Exception {
    StreamExecutionEnvironment env = StreamExecutionEnvironment.createRemoteEnvironment("192.168.56.101", 6123);

    DataStream<Tuple2<String, Integer>> dataStream = env
        .socketTextStream("192.168.56.102", 8080)
        .flatMap((String sentence, Collector<Tuple2<String, Integer>> out) ->
            {
                for (String word: sentence.split(" ")) {
                    out.collect(new Tuple2<String, Integer>(word, 1));
                }
            });


    // Alternative approach with an anonymous class
    /*DataStream<Tuple2<String, Integer>> dataStream = env
        .socketTextStream("localhost", 8080)
        .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
        @Override
        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) 
        throws Exception {
            for (String word: sentence.split(" ")) {
                out.collect(new Tuple2<String, Integer>(word, 1));
            }
        }
    });*/

    dataStream.print();

    env.execute("Window WordCount");
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

根据描述 here,错误可能不太直观,但本质上意味着您需要一个依赖项。

从概念上讲,这意味着您需要提供依赖项。

这通常是通过在罐子中提供它来完成的。

因此,基于依赖项的一般工作方式,我认为答案是您确实必须提供 Jar 来运行需要依赖项的代码。