如何在远程Yarn Resource Manager上部署samza作业

时间:2016-09-13 09:45:16

标签: hadoop yarn apache-samza

我们正在使用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作业。

由于

1 个答案:

答案 0 :(得分:1)

我们正在做的是:

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

      

    http - 关注PUT   ' http://namenode:50070/webhdfs/v1/user/someuser/location/samza-artifact.tar.gz?op=CREATE&user.name=someuser&overwrite=true'   < /local-artifact-location/your-artifact-name-dist.tar.gz

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

      

    yarn.package.path = HDFS://名称节点:8020 /用户/ SomeUser是否/位置/ samza-artifact.tar.gz

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

    • apacity-scheduler.xml
    • 芯-site.xml中
    • log4j.properties
    • yarn-env.sh
    • 纱-site.xml中
  5. 设置HADOOP_YARN_HOME环境变量

  6.   

    导出HADOOP_YARN_HOME = /纱线位置    (这里没有混淆..)

    1. 运行run-job.sh:
        

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