Samza JobRunner
使用一个名为 run-job.sh 的脚本启动 Samza 作业。
samza-example/target/bin/run-job.sh \
--config-factory=org.apache.samza.config.factories.PropertiesConfigFactory \
--config-path=file://$PWD/config/hello-world.properties
您为 run-job.sh 脚本提供两个参数:一个是配置位置,另一个是用于读取配置文件的工厂类。run-job.sh 脚本实际上是在执行一个名为 JobRunner 的 Samza 类。JobRunner 使用您的ConfigFactory 从配置路径获取一个 Config 对象。
public interface ConfigFactory {
Config getConfig(URI configUri);
}
Config 对象只是 Map 的包装,有一些不错的帮助方法。可以立即使用的是,Samza 随附了 PropertiesConfigFactory,但开发人员可以实现任何他们希望的 ConfigFactory。
一旦 JobRunner 得到您的配置,它会将您的配置提供给由 “job.factory” 属性定义的 StreamJobFactory 类。Samza 拥有三个作业工厂实现:ThreadJobFactory,ProcessJobFactory 和YarnJobFactory。StreamJobFactory 的职责是给 JobRunner 一个可以运行的工作。
public interface StreamJob {
StreamJob submit();
StreamJob kill();
ApplicationStatus waitForFinish(long timeoutMs);
ApplicationStatus waitForStatus(ApplicationStatus status, long timeoutMs);
ApplicationStatus getStatus();
}
一旦 JobRunner 获得了工作,它就会在 job 上调用 submit()。这个方法是告诉 StreamJob 实现来启动 SamzaContainer。在 LocalJobRunner 的情况下,它使用一个 run-container.sh 脚本在单独的进程中执行 SamzaContainer,这将在您运行 run-job.sh 的计算机上本地启动一个 SamzaContainer。
当您使用 YARN 时,此流程略有不同,稍后将介绍。
更多建议: