Apache flink Flink作业在第二次提交后崩溃

Apache flink Flink作业在第二次提交后崩溃,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我想从Flink job将数据流传输到AWS S3。下面是指向将数据流传输到S3的简单测试应用程序的链接 IntelliJ的代码在jar提交到我的机器上的Flink集群时也能工作。问题是这项工作只能工作一次。如果第二次提交作业,则会生成堆栈跟踪。如果我重新启动群集作业,则该作业将正常工作,但仅限于第一次 org.apache.commons.logging.logonfigurationexception:java.lang.IllegalAccessError:试图从类org.apache.c

我想从Flink job将数据流传输到AWS S3。下面是指向将数据流传输到S3的简单测试应用程序的链接

IntelliJ的代码在jar提交到我的机器上的Flink集群时也能工作。问题是这项工作只能工作一次。如果第二次提交作业,则会生成堆栈跟踪。如果我重新启动群集作业,则该作业将正常工作,但仅限于第一次

org.apache.commons.logging.logonfigurationexception:java.lang.IllegalAccessError:试图从类org.apache.commons.logging.impl.logging.impl.logfactorympl中访问类org.apache.commons.logging.impl.logfactorympl$3,由java.lang.IllegalAccessError:试图从类访问类org.apache.commons.logging.impl.logfactorympl$3引起org.apache.commons.logging.impl.LogFactoryImpl 位于org.apache.commons.logging.impl.LogFactoryImpl.newInstanceLogFactoryImpl.java:637 位于org.apache.commons.logging.impl.LogFactoryImpl.getInstanceLogFactoryImpl.java:336 位于org.apache.commons.logging.impl.LogFactoryImpl.getInstanceLogFactoryImpl.java:310 位于org.apache.commons.logging.LogFactory.getLogFactory.java:685 位于org.apache.http.impl.conn.poolgclientconnectionmanager.poolgclientconnectionmanager.java:76 位于org.apache.http.impl.conn.poolgclientconnectionmanager.poolgclientconnectionmanager.java:102 位于org.apache.http.impl.conn.poolgclientconnectionmanager.poolgclientconnectionmanager.java:88 位于org.apache.http.impl.conn.poolgclientconnectionmanager.poolgclientconnectionmanager.java:96 位于com.amazonaws.http.ConnectionManagerFactory.createPoologClientConnManagerConnectionManagerFactory.java:26 位于com.amazonaws.http.HttpClientFactory.createHttpClientHttpClientFactory.java:96 位于com.amazonaws.http.AmazonHttpClient.AmazonHttpClient.java:158 位于com.amazonaws.AmazonWebServiceClient.AmazonWebServiceClient.java:119 位于com.amazonaws.services.s3.AmazonS3Client.AmazonS3Client.java:389 位于com.amazonaws.services.s3.AmazonS3Client.AmazonS3Client.java:371 位于org.apache.hadoop.fs.s3a.S3AFileSystem.initializeS3AFileSystem.java:235 在org.apache.flink.streaming.connectors.fs.bucketing.BucketingSink.createHadoopFileSystemBucketingSink.java:1206 位于org.apache.flink.streaming.connectors.fs.bucketing.BucketingSink.initFileSystemBucketingSink.java:411 位于org.apache.flink.streaming.connectors.fs.bucketing.BucketingSink.initializeStateBucketingSink.java:355 位于org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryrestoreRefunctionstreamingFunctionUtils.java:178 位于org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionStateStreamingFunctionUtils.java:160 位于org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeStateAbstractUdfStreamOperator.java:96 位于org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeStateAbstractStreamOperator.java:258 位于org.apache.flink.streaming.runtime.tasks.StreamTask.InitializeOperatorStreamTask.java:694 位于org.apache.flink.streaming.runtime.tasks.StreamTask.initializeStateStreamTask.java:682 位于org.apache.flink.streaming.runtime.tasks.StreamTask.invokeStreamTask.java:253 位于org.apache.flink.runtime.taskmanager.Task.runTask.java:718 java:748 原因:java.lang.IllegalAccessError:试图从类org.apache.commons.logging.impl.LogFactoryImpl访问类org.apache.commons.logging.impl.LogFactoryImpl$3 位于org.apache.commons.logging.impl.LogFactoryImpl.getParentClassLoaderLogFactoryImpl.java:700 位于org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClassLogFactoryImpl.java:1187 位于org.apache.commons.logging.impl.logfactorympl.discoverlogimplementlogfactorympl.java:914 在org.apache.commons.logging.impl.LogFactoryImpl.newInstanceLogFactoryImpl.java:604 ... 26多 源:采集源->S3BucketingSink\u write\u bbb\u UID\u 1->接收器:S3BucketingSink\u write\u bbb\u UID\u 2,接收器:S3BucketingSink\u write\u bbb\u UID\u 3 1/1
这是因为commons日志记录不能很好地处理反向类加载

两个直接解决办法是:

切换到父类加载 从应用程序jar文件中删除所有Hadoop和commons日志代码
对于Flink 1.4.2和Flink 1.5,我们确保commons日志始终首先加载父级。在JBoss、Tomcat等项目中,像这样专门处理commons日志似乎很常见。

添加关于Flink和Hadoop版本有用的详细信息。Flink版本是1.4.1