我们正在使用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作业。
由于
答案 0 :(得分: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
,指定yarn.package.path,类似
yarn.package.path = HDFS://名称节点:8020 /用户/ SomeUser是否/位置/ samza-artifact.tar.gz
Samza需要知道你的YARN设置,从你的生产Hadoop集群中复制以下内容,放入/ yarn-location / conf(注意,/ conf很重要)
设置HADOOP_YARN_HOME环境变量
导出HADOOP_YARN_HOME = /纱线位置 (这里没有混淆..)
bin / run-job.sh --config-factory = org.apache.samza.config.factories.PropertiesConfigFactory --config-path = / path-to-config // your-task.properties