Проблема с Batch Table API в Flink 1.5 - Жалуется на необходимость Streaming API

Я пытаюсь создать пакетно-ориентированное задание Flink с Flink 1.5.0 и хочу использовать API таблиц и SQL для обработки данных. Моя проблема заключается в попытке создать BatchTableEnviroment. Я получаю ошибку компиляции.

BatchJob.java:[46,73] не может получить доступ к org.apache.flink.streaming.api.environment.StreamExecutionEnvironment

вызвано в

final BatchTableEnvironment bTableEnv = TableEnvironment.getTableEnvironment(bEnv);

Насколько я знаю, я не зависим от потоковой среды. Мой код выглядит как фрагмент ниже.

import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.TableEnvironment;
import org.apache.flink.table.api.java.BatchTableEnvironment;
import org.apache.flink.table.sources.CsvTableSource;
import org.apache.flink.table.sources.TableSource;

import java.util.Date;


public class BatchJob {

    public static void main(String[] args) throws Exception {
        final ExecutionEnvironment bEnv = ExecutionEnvironment.getExecutionEnvironment();
        // create a TableEnvironment for batch queries
        final BatchTableEnvironment bTableEnv = TableEnvironment.getTableEnvironment(bEnv);
    ... do stuff
    // execute program
        bEnv.execute("MY Batch Jon");
    }

Мои зависимости pom, как показано ниже

<dependencies>
        <!-- Apache Flink dependencies -->
        <!-- These dependencies are provided, because they should not be packaged into the JAR file. -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-scala_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>




        <!-- Add connector dependencies here. They must be in the default scope (compile). -->


        <!-- Example:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka-0.10_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        -->

        <!-- Add logging framework, to produce console output when running in the IDE. -->
        <!-- These dependencies are excluded from the application JAR by default. -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

Может ли кто-нибудь помочь мне понять, в чем заключается зависимость Streaming API и почему он мне нужен для пакетной работы? Заранее большое спасибо за вашу помощь. Оливер


person olibs    schedule 19.06.2018    source источник


Ответы (1)


API таблиц Flink и поддержка SQL - это унифицированные API для пакетной и потоковой обработки. Многие внутренние классы являются общими для пакетного и потокового выполнения, а также для Scala / Java Table API и SQL и, следовательно, связаны с пакетными зависимостями и потоковой передачи Flink.

Из-за этих общих классов для flink-streaming зависимостей также требуются пакетные запросы.

person Fabian Hueske    schedule 19.06.2018
comment
Большое спасибо Фабиан, добавлю в зависимости - person olibs; 19.06.2018