Apache Beam 不会将文件写入本地环境或 Google 存储

Posted

技术标签:

【中文标题】Apache Beam 不会将文件写入本地环境或 Google 存储【英文标题】:Apache Beam won't write files to local env or Google Storage 【发布时间】:2019-03-29 01:12:09 【问题描述】:

由于某种原因,Apache Beam 不会将文件写入我的本地环境或 Google 存储。我的目标是从 Google PubSub 读取数据并将其分批写入 Google Storage。为此,我有以下代码:

        pipeline.begin()
            .apply(PubsubIO.readStrings()
                    .fromSubscription("projects/PROJECT/subscriptions/SUBNAME"))
            .apply(ParDo.of(new UpperCaseAndPrint()))
            .apply(Window.into(FixedWindows.of(Duration.millis(1000))))
            .apply(TextIO.write().to("gs://BUCKETNAME/outputData")
                .withWindowedWrites()
                .withNumShards(1));

ParDo 函数打印进来的消息,并且似乎有数据进来:

19806 [direct-runner-worker] INFO  app  - message-4
19807 [direct-runner-worker] INFO  app  - message-3
19808 [direct-runner-worker] INFO  app  - message-2
19809 [direct-runner-worker] INFO  app  - message-1

有人知道为什么文件不会在本地或 Google 存储桶中创建吗?

【问题讨论】:

【参考方案1】:

因此,在使用PubsubIO 时,DirectRunnerTextIO 存在一些问题。使用另一个运行器(例如 Dataflow 运行器)时,问题就消失了。

我无法真正解决本地问题,但我希望这对遇到此问题并找到此帖子的下一个人有所帮助。

【讨论】:

在这里遇到类似的问题。作业在 Dataflow 中运行良好,但在 DirectRunner 中运行不佳。

以上是关于Apache Beam 不会将文件写入本地环境或 Google 存储的主要内容,如果未能解决你的问题,请参考以下文章

Python 上的 Apache Beam 将 beam.Map 调用相乘

使用 Apache Beam 以 CSV 格式将 BigQuery 结果写入 GCS

如何在 Apache Beam 中写入多个文件?

在数据流中完成 BQ 写入后的 Apache Beam 写入状态信息

Apache Beam - 将 BigQuery TableRow 写入 Cassandra

如何使用 Apache Beam (Python) 将多个嵌套的 JSON 写入 BigQuery 表