apache beam 中工人的入口点是什么? (调用了哪些方法?)

what is the entry point of the workers in apache beam? (what methods are called?)

Apache Beam 有大量很棒的文档,但我没有看到 运行 创建管道的代码与工作人员 运行 的代码。我想我看到这段代码将 运行 一次,但它也会被每个启动的工人 运行 ..

    public static void main(String[] args) {
        // Create the pipeline.
        PipelineOptions options =
            PipelineOptionsFactory.fromArgs(args).create();
        Pipeline p = Pipeline.create(options);

        // Create the PCollection 'lines' by applying a 'Read' transform.
        PCollection<String> lines = p.apply(
          "ReadMyFile", TextIO.read().from("gs://some/inputData.txt"));
    }

这是一个很好的问题,也是 Apache Beam 的核心。

tl;dr 没有 user-defined worker 启动时调用的入口点。

长答案

当您使用 Apache Beam SDK 进行编码(使用应用等)时,您真正在做的是在后台创建一个包含所有已应用转换的图形,请参阅文档 here。因此,一旦 p.run() 被调用,图形就会被发送到 worker 以供执行。然后将图形上的转换分解为组件并按顺序执行。

至于你在问题中写的代码,那只会是运行一次。当您执行 jar 时,该代码正好 运行 一次。然而,图表中的转换对于数据中的每个元素都是 运行(或更多,或更少,具体取决于图表)。

如果您对转换和用户定义函数 (ParDos) 的执行方式感到好奇,那么入口点位于 Apache Beam SDK here