我有一个包含Yarn的Flink集群,使用flinkquickstart java原型构建一个演示项目。用“mvn clean package-Pbuild jar”命令构建了一个fat jar,并用“flink run-m yarn cluster-yn 2./flink-SNAPSHOT-1.0.jar”命令提交程序后,程序抛出以下异常:
java.lang.NoClassDefFoundError:
下面是我的演示:
public static void main(String[] args) {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Properties props = new Properties();
props.setProperty("bootstrap.servers", "ip:port");
props.setProperty("group.id", "NewFlinkTest");
DataStreamSource < String > stream = env.addSource(new FlinkKafkaConsumer010 < > ("kafka_test", new SimpleStringSchema(), props));
stream.addSink(new FlinkKafkaProducer010 < > ("kafka_test_out", new SimpleStringSchema(), props));
try {
env.execute("Flink Jar Test");
} catch (Exception e) {
e.printStackTrace();
}
}
部分信息和版本:
Hadoop版本:2.7.2
Kafka 版本:0.10.2.1
JDK版本:1.8
Pom依赖性
编辑1:
org.apache.flink
flink-core
${flink.version}
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-clients_${scala.binary.version}
${flink.version}
org.apache.flink
flink-streaming-java_${scala.binary.version}
${flink.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
log4j
log4j
${log4j.version}
org.apache.flink
flink-connector-rabbitmq_2.11
1.4.0
org.apache.flink
flink-connector-kafka-0.10_${scala.binary.version}
1.4.0
经过一些尝试,我发现代码抛出异常不是我打包到uber jar中的同一个jar。我认为主要原因是客户机服务器有旧版本的flink connector kafka jar,但是不管我如何设置config yaml属性' Yarn .per- job -群集.include-用户jar”,程序总是抛出相同的异常。
编辑2:
加上 Kafka 之后- client:0.10.2.1到flink_home/lib/,它可以 job 。但仍然不知道为什么它不读取uber jar中的类文件。