Генерация самозапускающегося JAR с использованием Dataflow - PullRequest
1 голос
/ 19 марта 2019

В соответствии с указанием в ссылке попытался создать файл JAR для планирования задания потока данных в Airflow.Добавлена ​​соответствующая зависимость в разделе зависимостей и задано имя основного класса в разделе сборки в файле POM.Когда я выполняю задание потока данных, используя команду ниже maven, то получаю ошибку ниже.

Может ли кто-нибудь помочь мне решить эту проблему.

Команда Maven

- mvn package 
- java -jar target/sample-1.0.0.jar

Сообщение об ошибке:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/beam/sdk/options/PipelineOptions
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.privateGetMethodRecursive(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.beam.sdk.options.PipelineOptions

Мой файл конвейера

public interface DefaultOptions extends PipelineOptions,GcpOptions,ApplicationNameOptions,DataflowPipelineDebugOptions,DataflowPipelineWorkerPoolOptions,
BigQueryOptions,GcsOptions,StreamingOptions,CloudDebuggerOptions,DataflowProfilingOptions,PubsubOptions {

Инициализация моего конвейера в файле класса

PipelineOptionsFactory.register(DefaultOptions.class);

DefaultOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(DefaultOptions.class);
options.setRunner(DataflowRunner.class);
options.setProject(options.getDataFlowProjectName());
options.setTempLocation(options.getDataFlowProjectTempLocation());
options.setGcpTempLocation(options.getDataFlowProjectTempLocation());
Pipeline p = Pipeline.create(options);

Файл POM:

     <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
        <version>2.11.0</version>
     </dependency>

      <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>SampleWindowJar</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

1 Ответ

0 голосов
/ 19 марта 2019

Зависимость Cloud Dataflow - это не единственная зависимость, которая вам понадобится.Вам также понадобятся все зависимости Beam SDK.Самый простой способ получить их - использовать архетип Maven, который обеспечивает Beam:

https://beam.apache.org/get-started/quickstart-java/

mvn archetype:generate \
      -DarchetypeGroupId=org.apache.beam \
      -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-starter \
      -DarchetypeVersion=2.11.0 \
      -DgroupId=org.yourorg \
      -DartifactId=my-beam-pipeline \
      -Dversion="0.1" \
      -Dpackage=org.yourorg.pipelines \
      -DinteractiveMode=false

cd my-beam-pipeline

Вы увидите файл pom.xml и каталог со стартеромконвейер, который вы можете разработать.

Как только вы создадите свой архетип, он будет включать все основные зависимости SDK, а также вы можете добавить Dataflow Runner:

<dependency>
   <groupId>org.apache.beam</groupId>
   <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
   <version>2.11.0</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...