400 Bad Request 正在执行 oozie 作业
400 Bad Request executing oozie job
我正在尝试通过其 Web 服务执行 Oozie 作业 API (Oozie 4.1.0-cdh5.15.2)。以前这个作业是通过 Oozie 命令行成功执行的 API 并且大多数参数都是作为命令参数提供的。
workflow.xml 当前在 HDFS 上,所以我只是尝试在 XML 中发送作业属性,因为它在 documentation:
中指定
POST /oozie/v1/jobs
Content-Type: application/xml;charset=UTF-8
.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>oozie.use.system.libpath</name>
<value>true</value>
</property>
<property>
<name>oozie.credentials.skip</name>
<value>true</value>
</property>
<property>
<name>oozie.wf.application.path</name>
<value>hdfs://myownhdfs.com:8020/path/to/oozie/workflow/workflow.xml</value>
</property>
<property>
<name>jobTracker</name>
<value>myownhdfs.com:8032</value>
</property>
<property>
<name>nameNode</name>
<value>hdfs://myownhdfs.com:8020</value>
</property>
<property>
<name>customScripts</name>
<value>/nfs/path/to/scripts</value>
</property>
</configuration>
我的workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app
xmlns="uri:oozie:workflow:0.5"
name="wf-check">
<global>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
</global>
<start to="py-check" />
<action name="py-check">
<python xmlns="uri:oozie:custom-python-action:0.1">
<custom-scripts>${customScripts}</custom-scripts>
<script>foo/bar/myscript.py</script>
<debug-sleep-begin>0</debug-sleep-begin>
<debug-sleep-end>0</debug-sleep-end>
<log-level>DEBUG</log-level>
<capture-output />
</python>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Python failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />
</workflow-app>
然而我只得到 400 Bad Request: The request sent by the client was syntactically incorrect..
有没有人提示我可能做错了什么?
我使用 curl 执行了相同的请求(之前我使用 java 的 URLConnection 进行测试)并在响应中发现 2 headers 提供了有关错误的更多有用信息:oozie-error-code 和 oozie-error-message。第二个也包含错误代码,所以不需要记录它们。
HTTP/1.1 400 Bad Request
...
oozie-error-code: E0504
oozie-error-message: E0504: App directory [/foo/bar] does not exist
我正在尝试通过其 Web 服务执行 Oozie 作业 API (Oozie 4.1.0-cdh5.15.2)。以前这个作业是通过 Oozie 命令行成功执行的 API 并且大多数参数都是作为命令参数提供的。
workflow.xml 当前在 HDFS 上,所以我只是尝试在 XML 中发送作业属性,因为它在 documentation:
中指定POST /oozie/v1/jobs
Content-Type: application/xml;charset=UTF-8
.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>oozie.use.system.libpath</name>
<value>true</value>
</property>
<property>
<name>oozie.credentials.skip</name>
<value>true</value>
</property>
<property>
<name>oozie.wf.application.path</name>
<value>hdfs://myownhdfs.com:8020/path/to/oozie/workflow/workflow.xml</value>
</property>
<property>
<name>jobTracker</name>
<value>myownhdfs.com:8032</value>
</property>
<property>
<name>nameNode</name>
<value>hdfs://myownhdfs.com:8020</value>
</property>
<property>
<name>customScripts</name>
<value>/nfs/path/to/scripts</value>
</property>
</configuration>
我的workflow.xml
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app
xmlns="uri:oozie:workflow:0.5"
name="wf-check">
<global>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
</global>
<start to="py-check" />
<action name="py-check">
<python xmlns="uri:oozie:custom-python-action:0.1">
<custom-scripts>${customScripts}</custom-scripts>
<script>foo/bar/myscript.py</script>
<debug-sleep-begin>0</debug-sleep-begin>
<debug-sleep-end>0</debug-sleep-end>
<log-level>DEBUG</log-level>
<capture-output />
</python>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Python failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />
</workflow-app>
然而我只得到 400 Bad Request: The request sent by the client was syntactically incorrect..
有没有人提示我可能做错了什么?
我使用 curl 执行了相同的请求(之前我使用 java 的 URLConnection 进行测试)并在响应中发现 2 headers 提供了有关错误的更多有用信息:oozie-error-code 和 oozie-error-message。第二个也包含错误代码,所以不需要记录它们。
HTTP/1.1 400 Bad Request
...
oozie-error-code: E0504
oozie-error-message: E0504: App directory [/foo/bar] does not exist