Я создал очень простую задачу Apache Beam для тестирования, она написана на scala и выглядит так:
object Test { def main(args: Array[String]): Unit = { val options = PipelineOptionsFactory.fromArgs(args: _*).create() val p = Pipeline.create(options) println(s»———> $options») val printDoFn = new DoFn[String, Void] { @ProcessElement def processElement(c: ProcessContext): Unit = { val e = c.element() logger.info(e) println(s»===> $e») } } p.apply(Create.of[String](«A», «B», «CCC»)) .apply(ParDo.of(printDoFn)) p.run() } }
Теперь я развернул кластер flink с официальным образом докера flink.
Я создал убер-банку своей тестовой программы, используя плагин maven shaded.
Я загрузил эту убер-банку с помощью веб-интерфейса диспетчера заданий.
Я вхожу в систему JobManager, нахожу загруженный uber-jar и запускаю задание с помощью:
flink run -c myapps.Test ./52649b36-aa57-4f2b-95c7-2552fd737ea6_pipeline_beam-1.0.0-SNAPSHOT.jar —runner=FlinkRunner
Но я получил такую ошибку:
org.apache.flink.client.program.ProgramInvocationException: The main method caused an error. at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:545) at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:420) at org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:404) at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:798) at org.apache.flink.client.cli.CliFrontend.runProgram(CliFrontend.java:289) at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:215) at org.apache.flink.client.cli.CliFrontend.parseParameters(CliFrontend.java:1035) at org.apache.flink.client.cli.CliFrontend.lambda$main$9(CliFrontend.java:1111) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836) at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41) at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1111) Caused by: java.lang.IllegalStateException: No translator known for org.apache.beam.sdk.io.Read$Bounded at org.apache.beam.runners.core.construction.PTransformTranslation.urnForTransform(PTransformTranslation.java:164) at org.apache.beam.runners.flink.FlinkBatchPipelineTranslator.visitPrimitiveTransform(FlinkBatchPipelineTranslator.java:93) at org.apache.beam.sdk.runners.TransformHierarchy$Node.visit(TransformHierarchy.java:657) at org.apache.beam.sdk.runners.TransformHierarchy$Node.visit(TransformHierarchy.java:649) at org.apache.beam.sdk.runners.TransformHierarchy$Node.visit(TransformHierarchy.java:649) at org.apache.beam.sdk.runners.TransformHierarchy$Node.access$600(TransformHierarchy.java:311) at org.apache.beam.sdk.runners.TransformHierarchy.visit(TransformHierarchy.java:245) at org.apache.beam.sdk.Pipeline.traverseTopologically(Pipeline.java:458) at org.apache.beam.runners.flink.FlinkPipelineTranslator.translate(FlinkPipelineTranslator.java:38) at org.apache.beam.runners.flink.FlinkBatchPipelineTranslator.translate(FlinkBatchPipelineTranslator.java:49) at org.apache.beam.runners.flink.FlinkPipelineExecutionEnvironment.translate(FlinkPipelineExecutionEnvironment.java:119) at org.apache.beam.runners.flink.FlinkRunner.run(FlinkRunner.java:110) at org.apache.beam.sdk.Pipeline.run(Pipeline.java:313) at org.apache.beam.sdk.Pipeline.run(Pipeline.java:299) …
Я думаю, что основная ошибка: No translator known for org.apache.beam.sdk.io.Read$Bounded
Я скомпилировал свою программу с помощью apache beam 2.7.0 и со страницы flink runner: https://beam.apache.org/documentation/runners/flink/, я развернул версию flink 1.5.5 с официальным изображением flink: flink:1.5.5-hadoop28-scala_2.11-alpine
Я не нашел в Google никакой полезной информации.
Источник: