Я пишу приложение, которое пытается запустить пакетный поток данных на основе параметров. Для этого я использую PipelineOptionsFactory.create().as(...)
, а затем сеттеры для настройки параметров.Запуск заданий потока данных из приложения Java
Но когда я создаю объект объекта трубопровода с помощью Pipeline.create(opts)
я получаю следующее сообщение об ошибке:
04:48:08.711 [pool-4-thread-9] ERROR c.g.c.d.s.r.DataflowPipelineRunner - Unable to convert url (jar:file:/ferric.jar!/) to file.
04:48:08.711 [pool-4-thread-9] WARN BatchJobManager - unable to start materialization for view
java.lang.RuntimeException: Failed to construct instance from factory method DataflowPipelineRunner#fromOptions(interface com.google.cloud.dataflow.sdk.options.PipelineOptions)
at com.google.cloud.dataflow.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:234)
at com.google.cloud.dataflow.sdk.util.InstanceBuilder.build(InstanceBuilder.java:163)
at com.google.cloud.dataflow.sdk.runners.PipelineRunner.fromOptions(PipelineRunner.java:58)
at com.google.cloud.dataflow.sdk.Pipeline.create(Pipeline.java:135)
at com.brightcove.rna.dataflow.MaterializationPipeline.<init>(MaterializationPipeline.java:45)
at com.brightcove.rna.dataflow.MaterializationPipeline.create(MaterializationPipeline.java:92)
at com.brightcove.rna.ferric.DataflowJobService.createPipeline(DataflowJobService.java:121)
at javaslang.control.Try.mapTry(Try.java:410)
at javaslang.control.Try.map(Try.java:380)
at com.brightcove.rna.ferric.DataflowJobService.create(DataflowJobService.java:102)
at com.brightcove.rna.ferric.BatchJobScheduler.lambda$null$13(BatchJobScheduler.java:94)
at javaslang.Value.forEach(Value.java:246)
at com.brightcove.rna.ferric.BatchJobScheduler.lambda$startMaterializationJobs$14(BatchJobScheduler.java:91)
at javaslang.control.Try.onSuccess(Try.java:442)
at com.brightcove.rna.ferric.BatchJobScheduler.startMaterializationJobs(BatchJobScheduler.java:90)
at com.brightcove.rna.ferric.BatchJobScheduler.run(BatchJobScheduler.java:52)
at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.google.cloud.dataflow.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:223)
... 27 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unable to convert url (jar:file:/ferric.jar!/) to file.
at com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner.detectClassPathResourcesToStage(DataflowPipelineRunner.java:3176)
at com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner.fromOptions(DataflowPipelineRunner.java:291)
... 32 common frames omitted
Caused by: java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
at com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner.detectClassPathResourcesToStage(DataflowPipelineRunner.java:3172)
... 33 common frames omitted
Похоже, что бегун трубопровода пытается определить путь к банку, который содержит классы, которые она должна загрузить. Существует только одна банка (uberjar), которая имеет все необходимые классы. И понятно, что рассматриваемый путь неверен.
Каковы возможные обходные пути, которые я могу использовать для запуска программ обработки данных.
Чтобы подтвердить, что вы не устанавливаете какие-либо связанные трубопроводы в банку? –
Я использовал плагин градиента springboot и, кажется, застегнул все банки внутри uberjar. Замена этого с помощью плагина приложения (и, следовательно, не создание uberjar, похоже, решает проблему). –