我尝试运行数据流管道以从本地计算机(windows)读取并使用DirectPipelineRunner写入Google云存储。作业失败,并出现以下错误,指定了FileNotFoundException(因此我认为数据流作业无法读取我的位置)。我正在从本地计算机运行作业,以运行我创建的基于GCP的模板。我可以在GCP数据流仪表板中看到它,但是失败并显示以下错误。请帮忙。我还尝试了本地计算机的IP或主机名以及本地位置,但是遇到了FileNotFoundException吗?
错误:
java.io.FileNotFoundException: No files matched spec: C:/data/sampleinput.txt
at org.apache.beam.sdk.io.FileSystems.maybeAdjustEmptyMatchResult(FileSystems.java:172)
at org.apache.beam.sdk.io.FileSystems.match(FileSystems.java:158)
at org.apache.beam.sdk.io.FileBasedSource.split(FileBasedSource.java:261)
at com.google.cloud.dataflow.worker.WorkerCustomSources.splitAndValidate(WorkerCustomSources.java:275)
命令运行模板:
gcloud dataflow jobs run jobname --gcs-location gs://<somebucketname of template>/<templatename> --parameters inputFilePattern=C:/data/sampleinput.txt,outputLocation=gs://<bucketname>/output/outputfile,runner=DirectPipelineRunner
代码:
PCollection<String> textData =pipeline.apply("Read Text Data", TextIO.read().from(options.getInputFilePattern()));
textData.apply("Write Text Data",TextIO.write().to(options.getOutputLocation()));
答案 0 :(得分:1)
gcloud dataflow jobs run
命令在Cloud Dataflow上运行您的作业。这意味着数据流工作人员将尝试找到C:/data/sampleinput.txt
,显然这些工作人员上不存在。
您可以通过将sampleinput.txt
上传到存储桶并以gs://<bucketname>/sampleinput.txt
的形式提供URI inputFilePattern
来解决此问题。然后,数据流工作人员将能够找到您的输入文件,并且作业应该成功。