0

Google Dataflow - 如果从 Dataflow 写入本地服务器,如何指定 TextIO?(前提是 On-prem 服务器通过 Cloud VPN 连接到 GCP)

pipeline.apply("Writer",TextIO.write().to("XXX.XXX.XXX.XXX://tmp/somedirectory/somefilename");

在运行 Dataflow 作业时,是否像上面那样提供本地 IP 和目录?我尝试了,并且在步骤摘要中添加了元素,作业成功完成,但我没有看到本地服务器中写入的任何文件。[不确定它是否与本地服务器的身份验证有关]

4

2 回答 2

2

Apache beam textio 需要使用模式前缀指定文件系统,例如 file:// gs:// hdfs:// 。没有任何这些我相信它默认为本地文件。

https://cloud.google.com/blog/products/data-analytics/review-of-input-streaming-connectors-for-apache-beam-and-apache-spark

因此,鉴于您指定的“文件名”没有架构,我怀疑它会被写入工作人员的本地磁盘,这不是很有用!

因此,正如@ajp 建议的那样,您需要写入例如 GCS,然后让您的本地服务器从 GCS 读取。- 您或许可以使用 pub/sub 消息作为结果准备就绪的信号通知本地服务器

于 2019-01-04T19:34:20.917 回答
1

以这种方式使用 IP 地址和路径将不适用于TextIO,如果您在本地运行管道,它仅适用于文件路径。

对于从 Cloud Dataflow 到本地服务器的远程文件传输,最好的方法是先将文件写入 Cloud Storage 存储分区,如下所示:

pipeline.apply(TextIO.Write.named("WriteFilesOnPremise")
   .to("gs://myPipelineBucket/onPremiseFiles")

然后使用gsutil 命令从本地控制台直接将文件从存储桶下载到本地文件系统,或者使用Cloud Storage 客户端库方法以编程方式,或者您可以在本地使用 Cloud Storage FUSE 将存储桶挂载为文件系统系统。

于 2019-01-04T11:41:21.407 回答