繁体   English   中英

如何在 GCP 上使用 Apache Beam 数据流手动将可执行文件复制到工作人员

[英]How to manually copy executable to workers with Apache Beam Dataflow on GCP

Beam 和 GCP 有点新。 按照本文档并使用 Beam 的“子流程”示例,我一直在研究一个简单的 Java 管道,该管道运行 C 二进制文件。 使用 directRunner 时它运行良好,我现在正试图让它在云中运行。 随着文件暂存在 gs 存储桶中,我收到错误消息:'无法运行程序“gs://mybucketname/tmp/grid_working_files/Echo”:错误 = 2,没有这样的文件或目录'这是有道理的,因为我猜你可以'不直接从云存储中执行? 我现在卡住的地方是如何将可执行文件移动到工作人员。 该文件指出:

当您使用本机 Apache Beam 语言(Java 或 Python)时,Beam SDK 会自动将所有必需的代码移动到工作人员。 但是,当您调用外部代码时,您需要手动移动代码。  要移动代码,请执行以下操作:

  1. 将编译后的外部代码连同版本信息一起存储在 Cloud Storage 中。
  2. 在@Setup 方法中,创建一个同步块来检查代码文件是否在本地资源上可用。 您可以在第一个线程完成时使用 static 变量确认可用性,而不是实施物理检查。
  3. 如果文件不可用,请使用 Cloud Storage 客户端库将文件从 Cloud Storage 存储分区拉取到本地工作器。 推荐的方法是为此任务使用 Beam FileSystems 类。
  4. 移动文件后,确认在代码文件上设置了执行位。
  5. 在生产系统中,检查二进制文件的 hash 以确保文件已正确复制。

我查看了 FileSystems class,我想我明白了,但我不知道我需要将文件复制到哪里。 是否有工作人员使用的已知目录或文件路径? 我正在使用数据流运行器。

您可以将文件复制到工作人员本地文件系统中您想要的任何位置,例如,您可以使用tempfile模块创建一个新的空临时目录,在运行之前复制您的可执行文件。

使用自定义容器也可能是一个很好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM