我们正在hadoop yarn上运行samza job。到目前为止,我们通过在资源管理器主机上调用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发布tar " Samza -dist.tar.gz"都放在资源管理器本地文件系统上。
但是现在我想远程部署作业。为此,我试图使用资源管理器提交应用程序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/promoo -rules-consumer/bin/run-job.sh: No such file or directory
请告诉我做这件事的正确方法。是否有任何链接显示通过rest API或java代码部署samza作业?谢谢
我们正在做的是:
-
上传tar.gz文件到远程HDFS集群(你可以使用web-hdfs:
)http——follow PUT"http://namenode: 50070/webhdfs/v1/user/someuser/位置/samza-artifact.tar.gz ? op = CREATE& user.name = someuser&覆盖= true"& lt;/local-artifact-location your-artifact-name-dist.tar.gz
-
在任务属性中指定yarn.package。路径,比如
yarn.package.path = hdfs://namenode: 8020/user/someuser/位置/samza-artifact.tar.gz
-
Samza需要知道你的YARN设置,从你的生产Hadoop集群复制以下内容,放入/YARN -location/conf(注意,/conf很重要)
- apacity-scheduler.xml
- core-site.xml
- log4j . properties的
- yarn-env.sh
- yarn-site.xml
-
设置HADOOP_YARN_HOME环境变量
export HADOOP_YARN_HOME =/yarn-location(这里没有conf ..)
- 运行Run -job.sh
bin/run-job.sh——config-factory = org.apache.samza.config.factories。PropertiesConfigFactory——config-path =///your-task.properties path-to-config