Flink应用程序集成测试

时间:2018-10-16 09:22:55

标签: apache-flink

我正在尝试对我的flink应用程序进行集成测试。我的测试代码如下:

Quick actions and refactoring

在这里,我从子线程启动我的flink应用程序,并从主线程上载文件进行处理。测试运行正常,并且我得到了预期的结果文件。 但是,在关闭应用程序时,最后出现以下错误:

public class HttpsCsvIngestorTest extends AbstractTestBase {

    private final static Logger LOG = LoggerFactory.getLogger(HttpsCsvIngestorTest.class);

    @Test
    public void testHttpsCsvIngestion() throws Exception {

        Thread flinkJob = new Thread(new Runnable() {
            @Override
            public void run() {
                String[] args = new String[] { "--configFile", "the/path/to/config.properties", "--secretKey",
                        "12345" };
                JobExecutionResult execResult = CsvProcessorFlinkDriver.runFlinkJob(args);
            }
        });

        flinkJob.start();
        LOG.info("Starting flink job");

        Thread.sleep(10000);
        String[] args2 = new String[] { "localhost", filename }; 
        FileUploadClient.main(args2);

        Thread.sleep(30000);
        assertTrue(new File(System.getProperty("user.dir") + File.separator + "C:/Desktop/Result.csv")
                .exists());
        System.out.println("Test completed. Going to shutdown flink job");
    }

}

此处CsvProcessorFlinkDriver.java:132是 executionResult = env.execute 行。

我在做错什么吗?我还注意到,如果我在测试类的主线程中(而不是从子线程)启动flink应用程序,则执行不会进展到从LOG.info(“ Starting flink job”);

我的flink版本是1.5.0。即使使用flink-1.6.0,测试也会产生相同的错误。

1 个答案:

答案 0 :(得分:1)

当flink作业结束时,请flink unloads类用于您的代码。

如果在flink卸载它们后尝试使用这些类,则通常会遇到ClassNotFound异常。因此,您必须确保没有代码触及这些类。

在您的情况下,您在课程NoSuchMethodError上获得了org.apache.commons.io.IOUtils。似乎您使用的是commons-io的不同版本,并且JettyServerFileSource尝试AutoClose某些资源。

查看您对commons-io的依赖性是否不同于版本2.4(这是flink使用的版本)