使用 Apache Nemo 运行器

Apache Nemo 运行器可用于使用 Apache Nemo 执行 Beam 管道。Nemo 运行器可以通过各种优化过程使用 Nemo 编译器优化 Beam 管道,并使用 Nemo 运行时以分布式方式执行它们。您还可以部署一个独立的应用程序以用于本地模式或使用 YARN 或 Mesos 等资源管理器运行。

Nemo 运行器在 Apache Nemo 之上执行 Beam 管道,提供

Beam 功能矩阵 中记录了 Nemo 运行器的支持功能。

Nemo 运行器先决条件和设置

您可以简单地通过在您的 pom.xml 中添加对 0.1 以上版本的 Nemo 运行器的依赖项来使用 Nemo 运行器,如下所示

<dependency>
    <groupId>org.apache.nemo</groupId>
    <artifactId>nemo-compiler-frontend-beam</artifactId>
    <version>${nemo.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>${hadoop.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

将 Nemo 与您的应用程序一起部署

独立应用程序可能更容易管理,并允许您充分利用 Nemo 提供的功能。只需添加上面显示的依赖项,然后使用 Maven Shade 插件对应用程序 JAR 进行阴影化

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <configuration>
    <createDependencyReducedPom>false</createDependencyReducedPom>
    <filters>
      <filter>
        <artifact>*:*</artifact>
        <excludes>
          <exclude>META-INF/*.SF</exclude>
          <exclude>META-INF/*.DSA</exclude>
          <exclude>META-INF/*.RSA</exclude>
        </excludes>
      </filter>
    </filters>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <shadedArtifactAttached>true</shadedArtifactAttached>
        <shadedClassifierName>shaded</shadedClassifierName>
        <transformers>
          <transformer
            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

运行 mvn package 后,运行 ls target,您应该看到以下输出(在此示例中,您的 artifactId 为 beam-examples,版本为 1.0.0

beam-examples-1.0.0-shaded.jar

使用此阴影化的 jar,您可以使用 bin/run_beam.sh shell 脚本,如下所示

## MapReduce example
./bin/run_beam.sh \
    -job_id mr_default \
    -user_main org.apache.nemo.examples.beam.WordCount \
    -user_args "`pwd`/examples/resources/test_input_wordcount `pwd`/examples/resources/test_output_wordcount"

要使用 YARN 使用 Nemo,请将 Nemo 上的 -deploy_mode 标志设置为 yarn

可以在 Apache Nemo GitHub 的 README 中看到更多说明。

Nemo 运行器的管道选项

使用 Nemo 运行器执行管道时,您应该考虑以下管道选项

字段描述默认值
运行器要使用的管道运行器。此选项允许您在运行时确定管道运行器。设置为 NemoRunner 以使用 Nemo 运行。
maxBundleSize捆绑包中元素的最大数量。1000
maxBundleTimeMillis在最终确定捆绑包之前要等待的最大时间(以毫秒为单位)。1000

将更多选项添加到列表中,以完全支持 Nemo 支持的各种选项。

其他信息和注意事项

使用 Run_beam.sh 脚本

将 Nemo 应用程序提交到集群时,通常使用 Nemo 安装中提供的 bin/run_beam.sh 脚本。该脚本还提供了一组更丰富的选项,您可以将其传递以配置 Nemo 的各种操作。有关更多信息,请参阅 Apache Nemo GitHub README

监控您的作业

您可以使用 Nemo WebUI 监控正在运行的 Nemo 作业。文档目前正在更新,但可以在 Apache Nemo GitHub README 中找到更多信息。

流式执行

添加选项 -scheduler_impl_class_name org.apache.nemo.runtime.master.scheduler.StreamingScheduler-optimization_policy org.apache.nemo.compiler.optimizer.policy.StreamingPolicy 以将 Nemo 运行器设置为流式模式。此外,请确保扩展 resources.json 中的资源的 capacity,例如

{
  "type": "Reserved",
  "memory_mb": 2048,
  "capacity": 50000
}

有关更多信息,请参阅 Apache Nemo GitHub README