Ошибка Apache Flink java.lang.ClassNotFoundException: org.apache.flink.table.sources.TableSource?

Я пишу потоковую службу в Apache Flink. Я в основном выбираю данные из файла CSV с помощью org.apache.flink.table.sources.CsvTableSource. Ниже приведен код для того же:

 StreamTableEnvironment streamTableEnvironment = TableEnvironment
                .getTableEnvironment(streamExecutionEnvironment);

    CsvTableSource csvTableSource = CsvTableSource.builder().path(pathToCsvFile)
            .field("XXX0", Types.SQL_TIMESTAMP).field("XXX1", Types.INT)
            .field("XXX2", Types.DECIMAL).field("XXX3", Types.INT).field("XXX4", Types.INT)
            .field("XXX9", Types.DECIMAL).field("XXX5", Types.STRING)
            .field("XXX6", Types.STRING).field("XXX7", Types.STRING).fieldDelimiter(",").lineDelimiter("\n")
            .ignoreFirstLine().ignoreParseErrors().build();

    streamTableEnvironment.registerTableSource("metrics_table", csvTableSource);

    Table selectedMetricTable = streamTableEnvironment.sqlQuery(getSQLQuery(metricsType, metricsGroupingLevel));

    DataStream<Tuple2<Boolean, MetricsTimeSeriesData>> metricStream = streamTableEnvironment
            .toRetractStream(selectedMetricTable, MetricsTimeSeriesData.class);

Но это дает следующую ошибку:

Caused by: java.lang.ClassNotFoundException: org.apache.flink.table.sources.TableSource

Вот зависимости maven:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.11</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.11</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table_2.11</artifactId>
            <version>1.4.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-scala_2.11</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.11</artifactId>
            <version>1.4.0</version>
        </dependency>

Я вижу исходное определение указанного выше класса, но все же получаю эту ошибку. Пожалуйста помоги?


person Srivatsa Sinha    schedule 06.03.2018    source источник


Ответы (2)


Модуль flink-table не поставляется с двоичным дистрибутивом flink, поэтому по умолчанию он не поставляется в кластер. Вы можете поместить эту зависимость в свою установку кластера (в папке \lib), см. Последний раздел setup, или вы можете отправить свою работу как uber-jar с этой упакованной зависимостью, см. здесь.

person Dawid Wysakowicz    schedule 06.03.2018

Я использую версию Flink 1.8.0, я столкнулся с той же проблемой. Я могу исправить это, добавив ниже зависимость в pom.xml, указав на flink-table_2.12-1.8.0.jar из моего системного пути.

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table_2.12</artifactId>
            <version>1.8.0</version>
            <scope>system</scope>
            <systemPath>E:\flink-1.8.0-scala_2.12\opt\flink-table_2.12-1.8.0.jar</systemPath>
        </dependency>

Надеюсь, это поможет вам.

person Prashant Sahoo    schedule 05.06.2019