1

我们正在 hadoop 纱线上运行 samza 作业。到目前为止,我们通过在资源管理器主机上调用 run-job.sh 来手动部署作业。

run-job.sh --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory --config-path=file:///usr/share/promo-rules-consumer/config/config.properties

Samza 部署脚本和 samza distribtuion tar "samza-dist.tar.gz" 都放在资源管理器本地文件系统上。

但现在我想远程部署工作。为此,我正在尝试使用 Resource Manager Submit apps rest API 。

请求:POST http://hostname:8088/ws/v1/cluster/apps

身体 :

{
    "application-id":"application_1470648527247_0031",
    "application-name":"test1_0",
    "am-container-spec":
    {

      "commands":
      {
        "command":"/usr/share/promo-rules-consumer/bin/run-job.sh --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory --config-path=file:///usr/share/promo-rules-consumer/config/montecarlo.properties"
      }

    },
    "application-type":"SAMZA"
  }

但是我可以从资源管理器 UI 中看到错误

异常消息:/bin/bash:/usr/share/promo-rules-consumer/bin/run-job.sh:没有这样的文件或目录

请告诉我这样做的正确方法。是否有任何链接显示通过 rest API 或通过 java 代码部署 samza 作业。

谢谢

4

1 回答 1

1

我们正在做的是:

  1. 将 tar.gz 工件上传到远程集群 HDFS(可以使用 web-hdfs:

    http --follow PUT ' http://namenode:50070/webhdfs/v1/user/someuser/location/samza-artifact.tar.gz?op=CREATE&user.name=someuser&overwrite=true ' < /local-artifact-location/你的工件名称-dist.tar.gz

  2. 在任务属性中,指定 yarn.package.path,类似于

    yarn.package.path=hdfs://namenode:8020/user/someuser/location/samza-artifact.tar.gz

  3. Samza 需要知道您的 YARN 设置,从您的生产 Hadoop 集群中复制以下内容,放入 /yarn-location/conf(注意,/conf 很重要)

    • 容量调度程序.xml
    • 核心站点.xml
    • log4j.properties
    • 纱线环境.sh
    • 纱线站点.xml
  4. 设置 HADOOP_YARN_HOME 环境变量

export HADOOP_YARN_HOME=/yarn-location (这里没有conf ..)

  1. 运行 run-job.sh:

    bin/run-job.sh --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory --config-path=/path-to-config//your-task.properties

于 2017-01-10T16:57:37.787 回答