Java 在远程集群上运行Flink作业而不提供.jar

Java 在远程集群上运行Flink作业而不提供.jar,java,apache-flink,Java,Apache Flink,我有以下问题:我想在本地机器上用IntelliJ创建一个Flink作业,并在位于VM中的远程集群上运行它。我使用了createRemoteEnvironment函数,但是匿名类以及lambda表达式需要jar文件(如果我没有遗漏任何内容的话)。有没有一种(或另一种)方法可以在远程集群上运行Flink作业而不提供jar文件?下面的代码是一个简单的Flink作业,我想在远程集群上运行(没有jar) publicstaticvoidmain(字符串[]args)引发异常{ StreamExecutio

我有以下问题:我想在本地机器上用IntelliJ创建一个Flink作业,并在位于VM中的远程集群上运行它。我使用了createRemoteEnvironment函数,但是匿名类以及lambda表达式需要jar文件(如果我没有遗漏任何内容的话)。有没有一种(或另一种)方法可以在远程集群上运行Flink作业而不提供jar文件?下面的代码是一个简单的Flink作业,我想在远程集群上运行(没有jar)

publicstaticvoidmain(字符串[]args)引发异常{
StreamExecutionEnvironment env=StreamExecutionEnvironment.createRemoteEnvironment(“192.168.56.101”,6123);
DataStream DataStream=env
.socketTextStream(“192.168.56.102”,8080)
.flatMap((字符串语句,收集器输出)->
{
for(字符串字:句子。拆分(“”){
out.collect(新的Tuple2(word,1));
}
});
//使用匿名类的替代方法
/*DataStream DataStream=env
.socketTextStream(“localhost”,8080)
.flatMap(新的flatMap函数(){
@凌驾
公共void平面图(字符串语句,收集器输出)
抛出异常{
for(字符串字:句子。拆分(“”){
out.collect(新的Tuple2(word,1));
}
}
});*/
dataStream.print();
环境执行(“窗口字数”);
}
谢谢你的帮助

根据描述,错误可能不那么直观,但它本质上意味着您需要依赖关系

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

这通常是通过在罐子中提供它来实现的


因此,根据依赖项的工作原理,我认为答案是您必须提供Jar来运行需要依赖项的代码。

当您尝试提交时,会出现什么异常?@DawidWysakowicz如果我使用Lambda表达式运行代码,我会得到一个“ClassCastException”
原因:java.lang.ClassCastException:无法将java.lang.invoke.SerializedLambda的实例分配给实例中类型为org.apache.flink.api.operators.AbstractUdfStreamOperator.userFunction的org.apache.flink.api.common.functions.Function的字段org.apache.flink.api.operators.AbstractUdfStreamOperator.userFunction:
原因:org.apache.flink.streaming.runtime.tasks.StreamTaskException:无法加载用户类:org.mymaster.test.WindowWordCount$1
-如果包含jar,两个版本都可以正常工作
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");
}