登录
首页 >  Golang >  Go问答

在谷歌云平台中运行数据流时“找不到方案gs的文件系统”

来源:stackoverflow

时间:2024-04-11 22:36:35 183浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在谷歌云平台中运行数据流时“找不到方案gs的文件系统”》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在 google cloud platform(gcp) 中运行我的 google 数据流作业。 当我在本地运行此作业时,它运行良好,但是当我在 gcp 上运行它时,出现此错误 “java.lang.illegalargumentexception:未找到方案 gs 的文件系统”。 我可以访问该 google cloud uri,我可以将我的 jar 文件上传到该 uri,并且可以看到本地作业的一些临时文件。

我在 gcp 中的职位 id:

2019-08-08_21_47_27-162804342585245230(光束版本:2.12.0)

2019-08-09_16_41_15-11728697820819900062(光束版本:2.14.0)

我尝试了beam版本2.12.0和2.14.0,两者都有相同的错误。

java.lang.IllegalArgumentException: No filesystem found for scheme gs
    at org.apache.beam.sdk.io.FileSystems.getFileSystemInternal(FileSystems.java:456)
    at org.apache.beam.sdk.io.FileSystems.matchNewResource(FileSystems.java:526)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQueryHelpers.resolveTempLocation(BigQueryHelpers.java:689)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQuerySourceBase.extractFiles(BigQuerySourceBase.java:125)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQuerySourceBase.split(BigQuerySourceBase.java:148)
    at org.apache.beam.runners.dataflow.worker.WorkerCustomSources.splitAndValidate(WorkerCustomSources.java:284)
    at org.apache.beam.runners.dataflow.worker.WorkerCustomSources.performSplitTyped(WorkerCustomSources.java:206)
    at org.apache.beam.runners.dataflow.worker.WorkerCustomSources.performSplitWithApiLimit(WorkerCustomSources.java:190)
    at org.apache.beam.runners.dataflow.worker.WorkerCustomSources.performSplit(WorkerCustomSources.java:169)
    at org.apache.beam.runners.dataflow.worker.WorkerCustomSourceOperationExecutor.execute(WorkerCustomSourceOperationExecutor.java:78)
    at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.executeWork(BatchDataflowWorker.java:412)
    at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.doWork(BatchDataflowWorker.java:381)
    at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.getAndPerformWork(BatchDataflowWorker.java:306)
    at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.doWork(DataflowBatchWorkerHarness.java:135)
    at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:115)
    at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:102)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)

解决方案


如果您构建一个捆绑所有依赖项的“fat jar”,这可能是由几个问题引起的。

  1. 您必须包含依赖项 org.apache.beam:google-cloud-platform-core 才能拥有 Beam GCS 文件系统。
  2. 在远 jar 中,您必须保留 META-INF/services/org.apache.beam.sdk.io.FileSystemRegistrar 文件,其中包含一行 org.apache.beam.sdk.extensions.gcp.storage.GcsFileSystemRegistrar。您可以在步骤 1 的 jar 中找到该文件。您的依赖项中可能会有许多同名的文件,注册不同的 Beam 文件系统。您需要配置 maven 或 gradle 以将它们合并为构建的一部分,否则它们将相互覆盖而无法正常工作。

造成这种异常的还有一个原因。 确保在尝试访问文件之前创建管道(例如 Pipeline.create(options))。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>