Google Dataflow - 如果写入本地服务器,如何在java中指定TextIO?



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

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

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

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读取。 - 您也许可以使用发布/订阅消息作为向本地服务器发出结果已准备就绪的信号

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

对于从云数据流到本地服务器的远程文件传输,最好的方法是先在 Cloud Storage 存储桶中写入文件,如下所示:

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

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

最新更新