Мы создали очень простую работу в потоке данных.Он читает из BigQuery и периодически сохраняет в RedisCluster.Код конвейера выглядит следующим образом.
// initialize pipeline
PipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().create();
Pipeline pipeline = Pipeline.create(options);
// ... read from bigquery
final String query = "..."; // actual query snipped
PCollection<TableRow> bigQueryRes = pipeline.apply("Reading from BigQuery table",
BigQueryIO.readTableRows().fromQuery(query).usingStandardSql());
// ... store to Redis Cluster
bigQueryRes.apply("Storing to RedisCluster",
ParDo.of(new RedisClusterSinkDoFn()));
// run pipeline
pipeline.run();
Когда мы напрямую выполняем задание напрямую через командную строку, оно выполняется идеально.
Но когда мы генерируем шаблон из того же JAR-файла, выполняемого через Cloud Function, используя launch api , мы находим следующее исключение:
java.io.FileNotFoundException: No files matched spec: gs://dataflow-bucket/tmp/BigQueryExtractTemp/0e22ca710a6b45f7aa134cff02b4ae9b/000000000057.avro
at org.apache.beam.sdk.io.FileSystems.maybeAdjustEmptyMatchResult (FileSystems.java:166)
at org.apache.beam.sdk.io.FileSystems.match (FileSystems.java:153)
at org.apache.beam.sdk.io.FileBasedSource.createReader (FileBasedSource.java:332)
at org.apache.beam.runners.dataflow.worker.WorkerCustomSources$1.iterator (WorkerCustomSources.java:362)
at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.runReadLoop (ReadOperation.java:179)
at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.start (ReadOperation.java:160)
at org.apache.beam.runners.dataflow.worker.util.common.worker.MapTaskExecutor.execute (MapTaskExecutor.java:77)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.executeWork (BatchDataflowWorker.java:395)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.doWork (BatchDataflowWorker.java:364)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.getAndPerformWork (BatchDataflowWorker.java:292)
Мы не уверенычто вызывает эту проблему, поскольку ни журналы потока данных, ни BigQuery не помогают.Единственное отличие, которое я могу сказать, заключается в том, что когда задание выполняется успешно, существует папка "gs: // dataflow-bucket / tmp / BigQueryExtractTemp", которая создается с раздельным выводом результата запроса.Папка отсутствует, задание не выполняется.
Есть мысли о том, с чего начать отладку для этого?
Спасибо в ожидании.