java—如何使用gcp上的apache beam数据流将可执行文件手动复制到workers

lqfhib0f  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(350)

对beam和gcp有些陌生。遵循本文档并使用beam‘subprocess’示例,我一直在开发一个运行c二进制文件的简单java管道。当使用directrunner时,它运行得很好,我现在正在尝试让它在云中运行。当文件暂存在gs bucket中时,我得到一个错误:“cannot run program”gs://mybucketname/tmp/grid\u working\u files/echo“:error=2,no such file or directory”,这很有意义,因为我猜您不能直接从云存储执行?我现在遇到的问题是如何将可执行文件移动到worker。文件规定:
当您使用本机apachebeam语言(java或python)时,beam sdk 自动将所有必需的代码移到工作区。但是,调用外部代码时,需要手动移动代码。 要移动代码,请执行以下操作:
将编译的外部代码以及版本控制信息存储在云存储中。
在 @设置 方法,创建一个同步块以检查代码文件在本地资源上是否可用。在第一个线程完成时,可以使用静态变量确认可用性,而不是实现物理检查。
如果该文件不可用,请使用云存储客户机库将该文件从云存储桶拉到本地工作进程。推荐的方法是使用梁 文件系统 此任务的类。
移动文件后,确认在代码文件上设置了执行位。
在生产系统中,检查二进制文件的哈希值以确保文件已正确复制。
我看过filesystems类,我想我理解它,但我不知道我需要将文件复制到哪里。是否有工人使用的已知目录或文件路径?我正在使用数据流运行程序。

fjaof16o

fjaof16o1#

您可以将文件复制到workers本地文件系统中的任何位置,例如,您可以使用 tempfile 模块来创建一个新的、空的临时目录,运行前在其中复制可执行文件。
使用自定义容器也可能是一个很好的解决方案。

相关问题