You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by an...@apache.org on 2018/09/14 14:38:56 UTC

[13/21] oozie git commit: OOZIE-2734 amend [docs] Switch from TWiki to Markdown (asalamon74 via andras.piros, pbacsko, gezapeti)

http://git-wip-us.apache.org/repos/asf/oozie/blob/6a6f2199/docs/src/site/markdown/WebServicesAPI.md
----------------------------------------------------------------------
diff --git a/docs/src/site/markdown/WebServicesAPI.md b/docs/src/site/markdown/WebServicesAPI.md
new file mode 100644
index 0000000..a303802
--- /dev/null
+++ b/docs/src/site/markdown/WebServicesAPI.md
@@ -0,0 +1,2379 @@
+
+
+[::Go back to Oozie Documentation Index::](index.html)
+
+-----
+
+<!-- MACRO{toc|fromDepth=1|toDepth=4} -->
+
+## Oozie Web Services API, V1 (Workflow, Coordinator, And Bundle)
+
+The Oozie Web Services API is a HTTP REST JSON API.
+
+All responses are in `UTF-8`.
+
+Assuming Oozie is running at `OOZIE_URL`, the following web services end points are supported:
+
+   * \<OOZIE_URL\>/versions
+   * \<OOZIE_URL\>/v1/admin
+   * \<OOZIE_URL\>/v1/job
+   * \<OOZIE_URL\>/v1/jobs
+   * \<OOZIE_URL\>/v2/job
+   * \<OOZIE_URL\>/v2/jobs
+   * \<OOZIE_URL\>/v2/admin
+   * \<OOZIE_URL\>/v2/sla
+
+Documentation on the API is below; in some cases, looking at the corresponding command in the
+[Command Line Documentation](DG_CommandLineTool.html) page will provide additional details and examples.  Most of the functionality
+offered by the Oozie CLI is using the WS API. If you export `OOZIE_DEBUG` then the Oozie CLI will output the WS API
+details used by any commands you execute. This is useful for debugging purposes to or see how the Oozie CLI works with the WS API.
+
+### Versions End-Point
+
+_Identical to the corresponding Oozie v0 WS API_
+
+This endpoint is for clients to perform protocol negotiation.
+
+It support only HTTP GET request and not sub-resources.
+
+It returns the supported Oozie protocol versions by the server.
+
+Current returned values are `0, 1, 2`.
+
+**Request:**
+
+
+```
+GET /oozie/versions
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+[0,1]
+```
+
+### Admin End-Point
+
+This endpoint is for obtaining Oozie system status and configuration information.
+
+It supports the following sub-resources: `status, os-env, sys-props, configuration, instrumentation, systems, available-timezones`.
+
+#### System Status
+
+_Identical to the corresponding Oozie v0 WS API_
+
+A HTTP GET request returns the system status.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/status
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{"systemMode":NORMAL}
+```
+
+With a HTTP PUT request it is possible to change the system status between `NORMAL`, `NOWEBSERVICE`, and `SAFEMODE`.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/admin/status?systemmode=SAFEMODE
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+#### OS Environment
+
+_Identical to the corresponding Oozie v0 WS API_
+
+A HTTP GET request returns the Oozie system OS environment.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/os-env
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  TERM: "xterm",
+  JAVA_HOME: "/usr/java/latest",
+  XCURSOR_SIZE: "",
+  SSH_CLIENT: "::ffff:127.0.0.1 49082 22",
+  XCURSOR_THEME: "default",
+  INPUTRC: "/etc/inputrc",
+  HISTSIZE: "1000",
+  PATH: "/usr/java/latest/bin"
+  KDE_FULL_SESSION: "true",
+  LANG: "en_US.UTF-8",
+  ...
+}
+```
+
+#### Java System Properties
+
+_Identical to the corresponding Oozie v0 WS API_
+
+A HTTP GET request returns the Oozie Java system properties.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/java-sys-properties
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  java.vm.version: "11.0-b15",
+  sun.jnu.encoding: "UTF-8",
+  java.vendor.url: "http://java.sun.com/",
+  java.vm.info: "mixed mode",
+  ...
+}
+```
+
+#### Oozie Configuration
+
+_Identical to the corresponding Oozie v0 WS API_
+
+A HTTP GET request returns the Oozie system configuration.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/configuration
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  oozie.service.SchedulerService.threads: "5",
+  oozie.service.ActionService.executor.classes: "
+            org.apache.oozie.dag.action.decision.DecisionActionExecutor,
+            org.apache.oozie.dag.action.hadoop.HadoopActionExecutor,
+            org.apache.oozie.dag.action.hadoop.FsActionExecutor
+        ",
+  oozie.service.CallableQueueService.threads.min: "10",
+  oozie.service.DBLiteWorkflowStoreService.oozie.autoinstall: "true",
+  ...
+}
+```
+
+#### Oozie Instrumentation
+
+_Identical to the corresponding Oozie v0 WS API_
+
+Deprecated and by default disabled since 5.0.0.
+
+A HTTP GET request returns the Oozie instrumentation information.  Keep in mind that timers and counters that the Oozie server
+hasn't incremented yet will not show up.
+
+**Note:** If Instrumentation is enabled, then Metrics is unavailable.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/instrumentation
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  timers: [
+    {
+      group: "db",
+      data: [
+        {
+          ownMinTime: 2,
+          ownTimeStdDev: 0,
+          totalTimeStdDev: 0,
+          ownTimeAvg: 3,
+          ticks: 117,
+          name: "update-workflow",
+          ownMaxTime: 32,
+          totalMinTime: 2,
+          totalMaxTime: 32,
+          totalTimeAvg: 3
+        },
+        ...
+      ]
+    },
+    ...
+  ],
+  samplers: [
+    {
+      group: "callablequeue",
+      data: [
+        {
+          name: "threads.active",
+          value: 1.8333333333333333
+        },
+        {
+          name: "delayed.queue.size",
+          value: 0
+        },
+        {
+          name: "queue.size",
+          value: 0
+        }
+      ]
+    },
+    ...
+  ],
+  variables: [
+    {
+      group: "jvm",
+      data: [
+        {
+          name: "max.memory",
+          value: 506920960
+        },
+        {
+          name: "total.memory",
+          value: 56492032
+        },
+        {
+          name: "free.memory",
+          value: 45776800
+        }
+      ]
+    },
+    ...
+  ]
+}
+```
+
+#### Oozie Metrics
+
+_Available in the Oozie v2 WS API and later_
+
+A HTTP GET request returns the Oozie metrics information.  Keep in mind that timers and counters that the Oozie server
+hasn't incremented yet will not show up.
+
+
+**Note:** If Metrics is enabled, then Instrumentation is unavailable.
+
+**Note:** by default enabled since 5.0.0.
+
+**Request:**
+
+
+```
+GET /oozie/v2/admin/metrics
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+   "gauges" : {
+        "jvm.memory.non-heap.committed" : {
+          "value" : 62590976
+        },
+        "oozie.mode" : {
+          "value" : "NORMAL"
+        },
+        ...
+    },
+    "timers" : {
+        "commands.action.end.call.timer" : {
+          "mean" : 108.5,
+          "p50" : 111.5,
+          "p75" : 165.5,
+          "p999" : 169,
+          "count" : 4,
+          "p95" : 169,
+          "max" : 169,
+          "mean_rate" : 0,
+          "duration_units" : "milliseconds",
+          "p98" : 169,
+          "m1_rate" : 0,
+          "rate_units" : "calls/millisecond",
+          "m15_rate" : 0,
+          "stddev" : 62.9417720330995,
+          "m5_rate" : 0,
+          "p99" : 169,
+          "min" : 42
+        },
+        ...
+    },
+    "histograms" : {
+        "callablequeue.threads.active.histogram" : {
+          "p999" : 1,
+          "mean" : 0.0625,
+          "min" : 0,
+          "p75" : 0,
+          "p95" : 1,
+          "count" : 48,
+          "p98" : 1,
+          "stddev" : 0.24462302739504083,
+          "max" : 1,
+          "p99" : 1,
+          "p50" : 0
+        },
+        ...
+    },
+    "counters" : {
+        "commands.job.info.executions" : {
+          "count" : 9
+        },
+        "jpa.CoordJobsGetPendingJPAExecutor" : {
+          "count" : 1
+        },
+        "jpa.GET_WORKFLOW" : {
+          "count" : 10
+        },
+        ...
+    }
+}
+```
+
+#### Version
+
+_Identical to the corresponding Oozie v0 WS API_
+
+A HTTP GET request returns the Oozie build version.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/build-version
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{buildVersion: "3.0.0-SNAPSHOT" }
+```
+
+#### Available Time Zones
+
+A HTTP GET request returns the available time zones.
+
+**Request:**
+
+
+```
+GET /oozie/v1/admin/available-timezones
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  "available-timezones":[
+    {
+      "timezoneDisplayName":"SST (Pacific\/Midway)",
+      "timezoneId":"Pacific\/Midway"
+    },
+    {
+      "timezoneDisplayName":"NUT (Pacific\/Niue)",
+      "timezoneId":"Pacific\/Niue"
+    },
+    {
+      "timezoneDisplayName":"SST (Pacific\/Pago_Pago)",
+      "timezoneId":"Pacific\/Pago_Pago"
+    },
+    {
+      "timezoneDisplayName":"SST (Pacific\/Samoa)",
+      "timezoneId":"Pacific\/Samoa"
+    },
+    {
+      "timezoneDisplayName":"SST (US\/Samoa)",
+      "timezoneId":"US\/Samoa"
+    },
+    {
+      "timezoneDisplayName":"HAST (America\/Adak)",
+      "timezoneId":"America\/Adak"
+    },
+    {
+      "timezoneDisplayName":"HAST (America\/Atka)",
+      "timezoneId":"America\/Atka"
+    },
+    {
+      "timezoneDisplayName":"HST (HST)",
+      "timezoneId":"HST"
+    },
+    ...
+  ]
+}
+```
+
+#### Queue Dump
+
+A HTTP GET request returns the queue dump of the Oozie system.  This is an administrator debugging feature.
+
+**Request:**
+
+
+```
+
+GET /oozie/v1/admin/queue-dump
+```
+
+#### Available Oozie Servers
+
+A HTTP GET request returns the list of available Oozie Servers.  This is useful when Oozie is configured
+for [High Availability](AG_Install.html#HA); if not, it will simply return the one Oozie Server.
+
+**Request:**
+
+
+```
+GET /oozie/v2/admin/available-oozie-servers
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+    "hostA": "http://hostA:11000/oozie",
+    "hostB": "http://hostB:11000/oozie",
+    "hostC": "http://hostC:11000/oozie",
+}
+```
+
+#### List available sharelib
+A HTTP GET request to get list of available sharelib.
+If the name of the sharelib is passed as an argument (regex supported) then all corresponding files are also listed.
+
+**Request:**
+
+
+```
+GET /oozie/v2/admin/list_sharelib
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+{
+    "sharelib":
+        [
+            "oozie",
+            "hive",
+            "distcp",
+            "hcatalog",
+            "sqoop",
+            "mapreduce-streaming",
+            "pig"
+        ]
+}
+```
+
+**Request:**
+
+
+```
+GET /oozie/v2/admin/list_sharelib?lib=pig*
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+    "sharelib":
+            [
+                {
+                    "pig":
+                        {
+                            "sharelibFiles":
+                                [
+                                    hdfs://localhost:9000/user/purushah/share/lib/lib_20131114095729/pig/pig.jar
+                                    hdfs://localhost:9000/user/purushah/share/lib/lib_20131114095729/pig/piggybank.jar
+                                ]
+                        }
+                }
+            ]
+}
+```
+
+
+#### Update system sharelib
+This webservice call makes the oozie server(s) to pick up the latest version of sharelib present
+under oozie.service.WorkflowAppService.system.libpath directory based on the sharelib directory timestamp or reloads
+the sharelib metafile if one is configured. The main purpose is to update the sharelib on the oozie server without restarting.
+
+
+**Request:**
+
+
+```
+GET /oozie/v2/admin/update_sharelib
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+[
+    {
+       "sharelibUpdate":{
+          "host":"server1",
+          "status":"Server not found"
+       }
+    },
+    {
+       "sharelibUpdate":{
+          "host":"server2",
+          "status":"Successful",
+          "sharelibDirOld":"hdfs://localhost:51951/user/purushah/share/lib/lib_20140107181218",
+          "sharelibDirNew":"hdfs://localhost:51951/user/purushah/share/lib/lib_20140107181218"
+       }
+    },
+    {
+       "sharelibUpdate":{
+          "host":"server3",
+          "status":"Successful",
+          "sharelibDirOld":"hdfs://localhost:51951/user/purushah/share/lib/lib_20140107181218",
+          "sharelibDirNew":"hdfs://localhost:51951/user/purushah/share/lib/lib_20140107181218"
+       }
+    }
+]
+```
+
+#### Purge Command
+
+Oozie admin purge command cleans up the Oozie Workflow/Coordinator/Bundle records based on the parameters.
+The unit for parameters is day.
+
+Purge command will delete the workflow records (wf=30) older than 30 days, coordinator records (coord=7) older than 7 days and
+bundle records (bundle=7) older than 7 days. The limit (limit=10) defines, number of records to be fetch at a time. Turn
+(oldCoordAction`true/false) `on/off= coordinator action record purging for long running coordinators. If any of the parameter is
+not provided, then it will be taken from the `oozie-default/oozie-site` configuration.
+
+**Request:**
+
+
+```
+
+GET /oozie/v2/admin/purge?wf=30&coord=7&bundle=7&limit=10&oldCoordAction=true
+
+```
+
+**Response:**
+
+
+```
+
+{
+  "purge": "Purge command executed successfully"
+}
+
+```
+
+### Job and Jobs End-Points
+
+_Modified in Oozie v1 WS API_
+
+These endpoints are for submitting, managing and retrieving information of workflow, coordinator, and bundle jobs.
+
+#### Job Submission
+
+#### Standard Job Submission
+
+An HTTP POST request with an XML configuration as payload creates a job.
+
+The type of job is determined by the presence of one of the following 3 properties:
+
+   * `oozie.wf.application.path` : path to a workflow application directory, creates a workflow job
+   * `oozie.coord.application.path` : path to a coordinator application file, creates a coordinator job
+   * `oozie.bundle.application.path` : path to a bundle application file, creates a bundle job
+
+Or, if none of those are present, the jobtype parameter determines the type of job to run. It can either be mapreduce or pig.
+
+**Request:**
+
+
+```
+POST /oozie/v1/jobs
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>user.name</name>
+        <value>bansalm</value>
+    </property>
+    <property>
+        <name>oozie.wf.application.path</name>
+        <value>hdfs://foo:8020/user/bansalm/myapp/</value>
+    </property>
+    ...
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 201 CREATED
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "job-3"
+}
+```
+
+A created job will be in `PREP` status. If the query string parameter 'action=start' is provided in
+the POST URL, the job will be started immediately and its status will be `RUNNING`.
+
+Coordinator jobs with start time in the future they will not create any action until the start time
+happens.
+
+A coordinator job will remain in `PREP` status until it's triggered, in which case it will change to `RUNNING` status.
+The 'action=start' parameter is not valid for coordinator jobs.
+
+#### Proxy MapReduce Job Submission
+
+You can submit a Workflow that contains a single MapReduce action without writing a workflow.xml. Any required Jars or other files
+must already exist in HDFS.
+
+The following properties are required; any additional parameters needed by the MapReduce job can also be specified here:
+
+   * `fs.default.name`: The NameNode
+   * `mapred.job.tracker`: The JobTracker
+   * `mapred.mapper.class`: The map-task classname
+   * `mapred.reducer.class`: The reducer-task classname
+   * `mapred.input.dir`: The map-task input directory
+   * `mapred.output.dir`: The reduce-task output directory
+   * `user.name`: The username of the user submitting the job
+   * `oozie.libpath`: A directory in HDFS that contains necessary Jars for your job
+   * `oozie.proxysubmission`: Must be set to `true`
+
+**Request:**
+
+
+```
+POST /oozie/v1/jobs?jobtype=mapreduce
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>fs.default.name</name>
+        <value>hdfs://localhost:8020</value>
+    </property>
+    <property>
+        <name>mapred.job.tracker</name>
+        <value>localhost:8021</value>
+    </property>
+    <property>
+        <name>mapred.mapper.class</name>
+        <value>org.apache.oozie.example.SampleMapper</value>
+    </property>
+    <property>
+        <name>mapred.reducer.class</name>
+        <value>org.apache.oozie.example.SampleReducer</value>
+    </property>
+    <property>
+        <name>mapred.input.dir</name>
+        <value>hdfs://localhost:8020/user/rkanter/examples/input-data/text</value>
+    </property>
+    <property>
+        <name>mapred.output.dir</name>
+        <value>hdfs://localhost:8020/user/rkanter/examples/output-data/map-reduce</value>
+    </property>
+    <property>
+        <name>user.name</name>
+        <value>rkanter</value>
+    </property>
+    <property>
+        <name>oozie.libpath</name>
+        <value>hdfs://localhost:8020/user/rkanter/examples/apps/map-reduce/lib</value>
+    </property>
+    <property>
+        <name>oozie.proxysubmission</name>
+        <value>true</value>
+    </property>
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 201 CREATED
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "job-3"
+}
+```
+
+#### Proxy Pig Job Submission
+
+You can submit a Workflow that contains a single Pig action without writing a workflow.xml.  Any required Jars or other files must
+already exist in HDFS.
+
+The following properties are required:
+
+   * `fs.default.name`: The NameNode
+   * `mapred.job.tracker`: The JobTracker
+   * `user.name`: The username of the user submitting the job
+   * `oozie.pig.script`: Contains the pig script you want to run (the actual script, not a file path)
+   * `oozie.libpath`: A directory in HDFS that contains necessary Jars for your job
+   * `oozie.proxysubmission`: Must be set to `true`
+
+The following properties are optional:
+
+   * `oozie.pig.script.params.size`: The number of parameters you'll be passing to Pig
+   required
+  *  `oozie.pig.script.params.n`: A parameter (variable definition for the script) in 'key=value' format, the 'n' should be an integer starting with 0 to indicate the parameter number
+   * `oozie.pig.options.size`: The number of options you'll be passing to Pig
+   * `oozie.pig.options.n`: An argument to pass to Pig, the 'n' should be an integer starting with 0 to indicate the option number
+
+The `oozie.pig.options.n` parameters are sent directly to Pig without any modification unless they start with `-D`, in which case
+they are put into the `<configuration>` element of the action.
+
+In addition to passing parameters to Pig with `oozie.pig.script.params.n`, you can also create a properties file on HDFS and
+reference it with the `-param_file` option in `oozie.pig.script.options.n`; both are shown in the following example.
+
+
+```
+$ hadoop fs -cat /user/rkanter/pig_params.properties
+INPUT=/user/rkanter/examples/input-data/text
+```
+
+**Request:**
+
+
+```
+POST /oozie/v1/jobs?jobtype=pig
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>fs.default.name</name>
+        <value>hdfs://localhost:8020</value>
+    </property>
+    <property>
+        <name>mapred.job.tracker</name>
+        <value>localhost:8021</value>
+    </property>
+    <property>
+        <name>user.name</name>
+        <value>rkanter</value>
+    </property>
+    <property>
+        <name>oozie.pig.script</name>
+        <value>
+            A = load '$INPUT' using PigStorage(':');
+            B = foreach A generate $0 as id;
+            store B into '$OUTPUT' USING PigStorage();
+        </value>
+    </property>
+    <property>
+        <name>oozie.pig.script.params.size</name>
+        <value>1</value>
+    </property>
+    <property>
+        <name>oozie.pig.script.params.0</name>
+        <value>OUTPUT=/user/rkanter/examples/output-data/pig</value>
+    </property>
+    <property>
+        <name>oozie.pig.options.size</name>
+        <value>2</value>
+    </property>
+    <property>
+        <name>oozie.pig.options.0</name>
+        <value>-param_file</value>
+    </property>
+    <property>
+        <name>oozie.pig.options.1</name>
+        <value>hdfs://localhost:8020/user/rkanter/pig_params.properties</value>
+    </property>
+    <property>
+        <name>oozie.libpath</name>
+        <value>hdfs://localhost:8020/user/rkanter/share/lib/pig</value>
+    </property>
+    <property>
+        <name>oozie.proxysubmission</name>
+        <value>true</value>
+    </property>
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 201 CREATED
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "job-3"
+}
+```
+
+#### Proxy Hive Job Submission
+
+You can submit a Workflow that contains a single Hive action without writing a workflow.xml.  Any required Jars or other files must
+already exist in HDFS.
+
+The following properties are required:
+
+   * `fs.default.name`: The NameNode
+   * `mapred.job.tracker`: The JobTracker
+   * `user.name`: The username of the user submitting the job
+   * `oozie.hive.script`: Contains the hive script you want to run (the actual script, not a file path)
+   * `oozie.libpath`: A directory in HDFS that contains necessary Jars for your job
+   * `oozie.proxysubmission`: Must be set to `true`
+
+The following properties are optional:
+
+   * `oozie.hive.script.params.size`: The number of parameters you'll be passing to Hive
+   * `oozie.hive.script.params.n`: A parameter (variable definition for the script) in 'key=value' format, the 'n' should be an integer starting with 0 to indicate the parameter number
+   * `oozie.hive.options.size`: The number of options you'll be passing to Hive
+   * `oozie.hive.options.n`: An argument to pass to Hive, the 'n' should be an integer starting with 0 to indicate the option number
+
+The `oozie.hive.options.n` parameters are sent directly to Hive without any modification unless they start with `-D`, in which case
+they are put into the `<configuration>` element of the action.
+
+**Request:**
+
+
+```
+POST /oozie/v1/jobs?jobtype=hive
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>fs.default.name</name>
+        <value>hdfs://localhost:8020</value>
+    </property>
+    <property>
+        <name>mapred.job.tracker</name>
+        <value>localhost:8021</value>
+    </property>
+    <property>
+        <name>user.name</name>
+        <value>rkanter</value>
+    </property>
+    <property>
+        <name>oozie.hive.script</name>
+        <value>
+            CREATE EXTERNAL TABLE test (a INT) STORED AS TEXTFILE LOCATION '${INPUT}';
+            INSERT OVERWRITE DIRECTORY '${OUTPUT}' SELECT * FROM test;
+        </value>
+    </property>
+    <property>
+        <name>oozie.hive.script.params.size</name>
+        <value>2</value>
+    </property>
+    <property>
+        <name>oozie.hive.script.params.0</name>
+        <value>OUTPUT=/user/rkanter/examples/output-data/hive</value>
+    </property>
+    <property>
+        <name>oozie.hive.script.params.1</name>
+        <value>INPUT=/user/rkanter/examples/input-data/table</value>
+    </property>
+    <property>
+        <name>oozie.libpath</name>
+        <value>hdfs://localhost:8020/user/rkanter/share/lib/hive</value>
+    </property>
+    <property>
+        <name>oozie.proxysubmission</name>
+        <value>true</value>
+    </property>
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 201 CREATED
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "job-3"
+}
+```
+
+#### Proxy Sqoop Job Submission
+
+You can submit a Workflow that contains a single Sqoop command without writing a workflow.xml. Any required Jars or other
+ files must already exist in HDFS.
+
+The following properties are required:
+
+   * `fs.default.name`: The NameNode
+   * `mapred.job.tracker`: The JobTracker
+   * `user.name`: The username of the user submitting the job
+   * `oozie.sqoop.command`: The sqoop command you want to run where each argument occupies one line or separated by "\n"
+   * `oozie.libpath`: A directory in HDFS that contains necessary Jars for your job
+   * `oozie.proxysubmission`: Must be set to `true`
+
+The following properties are optional:
+
+   * `oozie.sqoop.options.size`: The number of options you'll be passing to Sqoop Hadoop job
+   * `oozie.sqoop.options.n`: An argument to pass to Sqoop hadoop job conf, the 'n' should be an integer starting with 0 to indicate the option number
+
+**Request:**
+
+
+```
+POST /oozie/v1/jobs?jobtype=sqoop
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>fs.default.name</name>
+        <value>hdfs://localhost:8020</value>
+    </property>
+    <property>
+        <name>mapred.job.tracker</name>
+        <value>localhost:8021</value>
+    </property>
+    <property>
+        <name>user.name</name>
+        <value>bzhang</value>
+    </property>
+    <property>
+        <name>oozie.sqoop.command</name>
+        <value>
+            import
+            --connect
+            jdbc:mysql://localhost:3306/oozie
+            --username
+            oozie
+            --password
+            oozie
+            --table
+            WF_JOBS
+            --target-dir
+            /user/${wf:user()}/${examplesRoot}/output-data/sqoop
+        </value>
+    </property>
+        <name>oozie.libpath</name>
+        <value>hdfs://localhost:8020/user/bzhang/share/lib/sqoop</value>
+    </property>
+    <property>
+        <name>oozie.proxysubmission</name>
+        <value>true</value>
+    </property>
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 201 CREATED
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "job-3"
+}
+```
+
+#### Managing a Job
+
+A HTTP PUT request starts, suspends, resumes, kills, update or dryruns a job.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/job/job-3?action=start
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+Valid values for the 'action' parameter are 'start', 'suspend', 'resume', 'kill', 'dryrun', 'rerun', and 'change'.
+
+Rerunning and changing a job require additional parameters, and are described below:
+
+#####  Re-Running a Workflow Job
+
+A workflow job in `SUCCEEDED`, `KILLED` or `FAILED` status can be partially rerun specifying a list
+of workflow nodes to skip during the rerun. All the nodes in the skip list must have complete its
+execution.
+
+The rerun job will have the same job ID.
+
+A rerun request is done with a HTTP PUT request with a `rerun` action.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/job/job-3?action=rerun
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property>
+        <name>user.name</name>
+        <value>tucu</value>
+    </property>
+    <property>
+        <name>oozie.wf.application.path</name>
+        <value>hdfs://foo:8020/user/tucu/myapp/</value>
+    </property>
+    <property>
+        <name>oozie.wf.rerun.skip.nodes</name>
+        <value>firstAction,secondAction</value>
+    </property>
+    ...
+</configuration>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+##### Re-Running a coordinator job
+
+A coordinator job in `RUNNING` `SUCCEEDED`, `KILLED` or `FAILED` status can be partially rerun by specifying the coordinator actions
+to re-execute.
+
+A rerun request is done with an HTTP PUT request with a `coord-rerun` `action`.
+
+The `type` of the rerun can be `date` or `action`.
+
+The `scope` of the rerun depends on the type:
+* `date`: a comma-separated list of date ranges. Each date range element is specified with dates separated by `::`
+* `action`: a comma-separated list of action ranges. Each action range is specified with two action numbers separated by `-`
+
+The `refresh` parameter can be `true` or `false` to specify if the user wants to refresh an action's input and output events.
+
+The `nocleanup` parameter can be `true` or `false` to specify is the user wants to cleanup output events for the rerun actions.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/job/job-3?action=coord-rerun&type=action&scope=1-2&refresh=false&nocleanup=false
+.
+```
+
+or
+
+
+```
+PUT /oozie/v1/job/job-3?action=coord-rerun&type=date2009-02-01T00:10Z::2009-03-01T00:10Z&scope=&refresh=false&nocleanup=false
+.
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+##### Re-Running a bundle job
+
+A coordinator job in `RUNNING` `SUCCEEDED`, `KILLED` or `FAILED` status can be partially rerun by specifying the coordinators to
+re-execute.
+
+A rerun request is done with an HTTP PUT request with a `bundle-rerun` `action`.
+
+A comma separated list of coordinator job names (not IDs) can be specified in the `coord-scope` parameter.
+
+The `date-scope` parameter is a comma-separated list of date ranges. Each date range element is specified with dates separated
+by `::`. If empty or not included, Oozie will figure this out for you
+
+The `refresh` parameter can be `true` or `false` to specify if the user wants to refresh the coordinator's input and output events.
+
+The `nocleanup` parameter can be `true` or `false` to specify is the user wants to cleanup output events for the rerun coordinators.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/job/job-3?action=bundle-rerun&coord-scope=coord-1&refresh=false&nocleanup=false
+.
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+
+##### Changing endtime/concurrency/pausetime of a Coordinator Job
+
+A coordinator job not in `KILLED` status can have it's endtime, concurrency, or pausetime changed.
+
+A change request is done with an HTTP PUT request with a `change` `action`.
+
+The `value` parameter can contain any of the following:
+* endtime: the end time of the coordinator job.
+* concurrency: the concurrency of the coordinator job.
+* pausetime: the pause time of the coordinator job.
+
+Multiple arguments can be passed to the `value` parameter by separating them with a ';' character.
+
+If an already-succeeded job changes its end time, its status will become running.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/job/job-3?action=change&value=endtime=2011-12-01T05:00Z
+.
+```
+
+or
+
+
+```
+PUT /oozie/v1/job/job-3?action=change&value=concurrency=100
+.
+```
+
+or
+
+
+```
+PUT /oozie/v1/job/job-3?action=change&value=pausetime=2011-12-01T05:00Z
+.
+```
+
+or
+
+
+```
+PUT /oozie/v1/job/job-3?action=change&value=endtime=2011-12-01T05:00Z;concurrency=100;pausetime=2011-12-01T05:00Z
+.
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+```
+
+##### Updating coordinator definition and properties
+Existing coordinator definition and properties will be replaced by new definition and properties. Refer [Updating coordinator definition and properties](DG_CommandLineTool.html#Updating_coordinator_definition_and_properties)
+
+
+```
+PUT oozie/v2/job/0000000-140414102048137-oozie-puru-C?action=update
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+{"update":
+     {"diff":"**********Job definition changes**********\n******************************************\n**********Job conf changes****************\n@@ -8,16 +8,12 @@\n
+          <value>hdfs:\/\/localhost:9000\/user\/purushah\/examples\/apps\/aggregator\/coordinator.xml<\/value>\r\n   <\/property>\r\n   <property>\r\n
+          -    <name>user.name<\/name>\r\n
+          -    <value>purushah<\/value>\r\n
+          -    <\/property>\r\n
+          -  <property>\r\n     <name>start<\/name>\r\n
+               <value>2010-01-01T01:00Z<\/value>\r\n   <\/property>\r\n   <property>\r\n
+          -    <name>newproperty<\/name>\r\n
+          -    <value>new<\/value>\r\n
+          +    <name>user.name<\/name>\r\n
+          +    <value>purushah<\/value>\r\n   <\/property>\r\n   <property>\r\n
+               <name>queueName<\/name>\r\n******************************************\n"
+      }
+}
+```
+
+
+#### Job Information
+
+A HTTP GET request retrieves the job information.
+
+**Request:**
+
+
+```
+GET /oozie/v1/job/job-3?show=info&timezone=GMT
+```
+
+**Response for a workflow job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "0-200905191240-oozie-W",
+  appName: "indexer-workflow",
+  appPath: "hdfs://user/bansalm/indexer.wf",
+  externalId: "0-200905191230-oozie-pepe",
+  user: "bansalm",
+  status: "RUNNING",
+  conf: "<configuration> ... </configuration>",
+  createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+  startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+  endTime: null,
+  run: 0,
+  actions: [
+    {
+      id: "0-200905191240-oozie-W@indexer",
+      name: "indexer",
+      type: "map-reduce",
+      conf: "<configuration> ...</configuration>",
+      startTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      status: "OK",
+      externalId: "job-123-200903101010",
+      externalStatus: "SUCCEEDED",
+      trackerUri: "foo:8021",
+      consoleUrl: "http://foo:50040/jobdetailshistory.jsp?jobId=...",
+      transition: "reporter",
+      data: null,
+      errorCode: null,
+      errorMessage: null,
+      retries: 0
+    },
+    ...
+  ]
+}
+```
+
+**Response for a coordinator job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  id: "0-200905191240-oozie-C",
+  appName: "indexer-Coord",
+  appPath: "hdfs://user/bansalm/myapp/logprocessor-coord.xml",
+  externalId: "0-200905191230-oozie-pepe",
+  user: "bansalm",
+  status: "RUNNING",
+  conf: "<configuration> ... </configuration>",
+  createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+  startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+  endTime: "Fri, 31 Dec 2009 00:00:00 GMT",
+  frequency: "${days(1)}"
+  actions: [
+    {
+      id: "0000010-130426111815091-oozie-bansalm-C@1",
+      createdTime: "Fri, 26 Apr 2013 20:57:07 GMT",
+      externalId: "",
+      missingDependencies: "",
+      runConf: null,
+      createdConf: null,
+      consoleUrl: null,
+      nominalTime: "Fri, 01 Jan 2010 01:00:00 GMT",
+  ...
+}
+```
+
+**Response for a bundle job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  jobType: "bundle",
+  id: "0-200905191240-oozie-B",
+  appName: "new-bundle",
+  appPath: "hdfs://user/bansalm/myapp/logprocessor-bundle.xml",
+  externalId: "0-200905191230-oozie-pepe",
+  user: "bansalm",
+  status: "RUNNING",
+  conf: "<configuration> ... </configuration>",
+  createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+  startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+  endTime: "Fri, 31 Dec 2009 00:00:00 GMT"
+  bundleCoordJobs: [
+    {
+      status: "RUNNING",
+      concurrency: 1,
+      conf: "<configuration> ... </configuration>",
+      executionPolicy: "FIFO",
+      toString: "Coordinator application id[0000010-130426111815091-oozie-bansalm-C] status[RUNNING]",
+      coordJobName: "coord-1",
+      endTime: "Fri, 01 Jan 2010 03:00:00 GMT",
+      ...
+    }
+  ...
+}
+```
+
+**Getting all the Workflows corresponding to a Coordinator Action:**
+
+A coordinator action kicks off different workflows for its original run and all subsequent reruns.
+Getting a list of those workflow ids is a useful tool to keep track of your actions' runs and
+to go debug the workflow job logs if required. Along with ids, it also lists their statuses,
+and start and end times for quick reference.
+
+Both v1 and v2 API are supported. v0 is not supported.
+
+
+```
+GET /oozie/v2/job/0000001-111219170928042-oozie-joe-C@1?show=allruns
+```
+
+**Response**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{"workflows":[
+    {
+        "startTime":"Mon, 24 Mar 2014 23:40:53 GMT",
+        "id":"0000001-140324163709596-oozie-chit-W",
+        "status":"SUCCEEDED",
+        "endTime":"Mon, 24 Mar 2014 23:40:54 GMT"
+    },
+    {
+        "startTime":"Mon, 24 Mar 2014 23:44:01 GMT",
+        "id":"0000000-140324164318985-oozie-chit-W",
+        "status":"SUCCEEDED",
+        "endTime":"Mon, 24 Mar 2014 23:44:01 GMT"
+    },
+    {
+        "startTime":"Mon, 24 Mar 2014 23:44:24 GMT",
+        "id":"0000001-140324164318985-oozie-chit-W",
+        "status":"SUCCEEDED",
+        "endTime":"Mon, 24 Mar 2014 23:44:24 GMT"
+    }
+]}
+```
+
+An alternate API is also available for the same output. With this API, one can pass the coordinator **JOB** Id
+followed by query params - `type=action` and `scope=<action-number>`. One single action number can be passed at a time.
+
+
+```
+GET /oozie/v2/job/0000001-111219170928042-oozie-joe-C?show=allruns&type=action&scope=1
+```
+
+**Retrieve a subset of actions**
+
+Query parameters, `offset` and `length` can be specified with a workflow job to retrieve specific actions. Default is offset=0, len=1000
+
+```
+GET /oozie/v1/job/0000002-130507145349661-oozie-joe-W?show=info&offset=5&len=10
+```
+Query parameters, `offset`, `length`, `filter` can be specified with a coordinator job to retrieve specific actions.
+Query parameter, `order` with value "desc" can be used to retrieve the latest coordinator actions materialized instead of actions from @1.
+Query parameters `filter` can be used to retrieve coordinator actions matching specific status.
+Default is offset=0, len=0 for v2/job (i.e., does not return any coordinator actions) and offset=0, len=1000 with v1/job and v0/job.
+So if you need actions to be returned with v2 API, specifying `len` parameter is necessary.
+Default `order` is "asc".
+
+```
+GET /oozie/v1/job/0000001-111219170928042-oozie-joe-C?show=info&offset=5&len=10&filter=status%3DKILLED&order=desc
+```
+Note that the filter is URL encoded, its decoded value is `status=KILLED`.
+
+```
+GET /oozie/v1/job/0000001-111219170928042-oozie-joe-C?show=info&filter=status%21%3DSUCCEEDED&order=desc
+```
+This retrieves coordinator actions except for SUCCEEDED status, which is useful for debugging.
+
+**Retrieve information of the retry attempts of the workflow action:**
+
+
+```
+GET oozie/v2/job/0000000-161212175234862-oozie-puru-W@pig-node?show=retries
+```
+
+**Response**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+     "retries":
+     [
+         {
+             "startTime": "Tue, 13 Dec 2016 01:54:13 GMT",
+             "consoleUrl": "http://localhost:50030/jobdetails.jsp?jobid=job_201612051339_2648",
+             "endTime": "Tue, 13 Dec 2016 01:54:20 GMT",
+             "attempt": "1"
+         },
+         {
+             "startTime": "Tue, 13 Dec 2016 01:55:20 GMT",
+             "consoleUrl": "http://localhost:50030/jobdetails.jsp?jobid=job_201612051339_2649",
+             "endTime": "Tue, 13 Dec 2016 01:55:24 GMT",
+             "attempt": "2"
+         }
+    ]
+}
+```
+
+#### Job Application Definition
+
+A HTTP GET request retrieves the workflow or a coordinator job definition file.
+
+**Request:**
+
+
+```
+GET /oozie/v1/job/job-3?show=definition
+```
+
+**Response for a workflow job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<workflow-app name='xyz-app' xmlns="uri:oozie:workflow:0.1">
+    <start to='firstaction' />
+    ...
+    <end name='end' />
+</workflow-app>
+```
+
+**Response for a coordinator job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<coordinator-app name='abc-app' xmlns="uri:oozie:coordinator:0.1" frequency="${days(1)}
+                 start="2009-01-01T00:00Z" end="2009-12-31T00:00Z" timezone="America/Los_Angeles">
+    <datasets>
+    ...
+    </datasets>
+    ...
+</coordinator-app>
+```
+
+**Response for a bundle job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8"?>
+<bundle-app name='abc-app' xmlns="uri:oozie:coordinator:0.1"
+                 start="2009-01-01T00:00Z" end="2009-12-31T00:00Z"">
+    <datasets>
+    ...
+    </datasets>
+    ...
+</bundle-app>
+```
+
+#### Job Log
+
+An HTTP GET request retrieves the job log.
+
+**Request:**
+
+
+```
+GET /oozie/v1/job/job-3?show=log
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: text/plain;charset=UTF-8
+.
+...
+23:21:31,272 TRACE oozieapp:526 - USER[bansalm] GROUP[other] TOKEN[-] APP[test-wf] JOB[0-20090518232130-oozie-tucu] ACTION[mr-1] Start
+23:21:31,305 TRACE oozieapp:526 - USER[bansalm] GROUP[other] TOKEN[-] APP[test-wf] JOB[0-20090518232130-oozie-tucu] ACTION[mr-1] End
+...
+```
+
+#### Job Error Log
+
+An HTTP GET request retrieves the job error log.
+
+**Request:**
+
+
+```
+GET /oozie/v2/job/0000000-150121110331712-oozie-puru-B?show=errorlog
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: text/plain;charset=UTF-8
+2015-01-21 11:33:29,090  WARN CoordSubmitXCommand:523 - SERVER[-] USER[-] GROUP[-] TOKEN[-] APP[-] JOB[0000000-150121110331712-oozie-puru-B] ACTION[] SAXException :
+org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 22; cvc-complex-type.2.4.a: Invalid content was found starting with element 'concurrency'. One of '{"uri:oozie:coordinator:0.2":controls, "uri:oozie:coordinator:0.2":datasets, "uri:oozie:coordinator:0.2":input-events, "uri:oozie:coordinator:0.2":output-events, "uri:oozie:coordinator:0.2":action}' is expected.
+        at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
+        at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
+...
+```
+
+
+#### Job Audit Log
+
+An HTTP GET request retrieves the job audit log.
+
+**Request:**
+
+
+```
+GET /oozie/v2/job/0000000-150322000230582-oozie-puru-C?show=auditlog
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: text/plain;charset=UTF-8
+2015-03-22 00:04:35,494  INFO oozieaudit:520 - IP [-], USER [purushah], GROUP [null], APP [-], JOBID [0000000-150322000230582-oozie-puru-C], OPERATION [start], PARAMETER [null], STATUS [SUCCESS], HTTPCODE [200], ERRORCODE [null], ERRORMESSAGE [null]
+2015-03-22 00:05:13,823  INFO oozieaudit:520 - IP [-], USER [purushah], GROUP [null], APP [-], JOBID [0000000-150322000230582-oozie-puru-C], OPERATION [suspend], PARAMETER [0000000-150322000230582-oozie-puru-C], STATUS [SUCCESS], HTTPCODE [200], ERRORCODE [null], ERRORMESSAGE [null]
+2015-03-22 00:06:59,561  INFO oozieaudit:520 - IP [-], USER [purushah], GROUP [null], APP [-], JOBID [0000000-150322000230582-oozie-puru-C], OPERATION [suspend], PARAMETER [0000000-150322000230582-oozie-puru-C], STATUS [SUCCESS], HTTPCODE [200], ERRORCODE [null], ERRORMESSAGE [null]
+2015-03-22 23:22:20,012  INFO oozieaudit:520 - IP [-], USER [purushah], GROUP [null], APP [-], JOBID [0000000-150322000230582-oozie-puru-C], OPERATION [suspend], PARAMETER [0000000-150322000230582-oozie-puru-C], STATUS [SUCCESS], HTTPCODE [200], ERRORCODE [null], ERRORMESSAGE [null]
+2015-03-22 23:28:48,218  INFO oozieaudit:520 - IP [-], USER [purushah], GROUP [null], APP [-], JOBID [0000000-150322000230582-oozie-puru-C], OPERATION [resume], PARAMETER [0000000-150322000230582-oozie-puru-C], STATUS [SUCCESS], HTTPCODE [200], ERRORCODE [null], ERRORMESSAGE [null]
+```
+
+
+#### Filtering the server logs with logfilter options
+User can provide multiple option to filter logs using -logfilter opt1=val1;opt2=val1;opt3=val1. This can be used to fetch only just logs of interest faster as fetching Oozie server logs is slow due to the overhead of pattern matching.
+
+
+```
+GET /oozie/v1/job/0000003-140319184715726-oozie-puru-C?show=log&logfilter=limit=3;loglevel=WARN
+```
+
+
+Refer to the [Filtering the server logs with logfilter options](DG_CommandLineTool.html#Filtering_the_server_logs_with_logfilter_options) for more details.
+
+
+#### Job graph
+
+An `HTTP GET` request returns the image of the workflow DAG (rendered as a PNG or SVG image, or as a DOT string).
+
+   * The nodes that are being executed are painted yellow
+   * The nodes that have successfully executed are painted green
+   * The nodes that have failed execution are painted red
+   * The nodes that are yet to be executed are pained gray
+   * An arc painted green marks the successful path taken so far
+   * An arc painted red marks the failure of the node and highlights the _error_ action
+   * An arc painted gray marks a path not taken yet
+
+**PNG request:**
+
+```
+GET /oozie/v1/job/job-3?show=graph[&show-kill=true][&format=png]
+```
+
+**PNG response:**
+
+```
+HTTP/1.1 200 OK
+Content-Type: image/png
+Content-Length: {image_size_in_bytes}
+
+{image_bits}
+```
+
+**SVG request:**
+
+```
+GET /oozie/v1/job/job-3?show=graph[&show-kill=true]&format=svg
+```
+
+**SVG response:**
+
+```
+HTTP/1.1 200 OK
+Content-Type: image/svg+xml
+Content-Length: {image_size_in_bytes}
+
+{image_bits}
+```
+
+**DOT request:**
+
+```
+GET /oozie/v1/job/job-3?show=graph[&show-kill=true]&format=dot
+```
+
+**DOT response:**
+
+```
+HTTP/1.1 200 OK
+Content-Type: text/plain
+Content-Length: {dot_size_in_bytes}
+
+{dot_bytes}
+```
+
+The optional `show-kill` parameter shows `kill` node in the graph. Valid values for this parameter are `1`, `yes`, and `true`.
+This parameter has no effect when workflow fails and the failure node leads to the `kill` node; in  that case `kill` node is shown
+always.
+
+The optional `format` parameter describes whether the response has to be rendered as a PNG image, or an SVG image, or a DOT string.
+When omitted, `format` is considered as `png` for backwards compatibility. Oozie Web UI uses the `svg` `format`.
+
+The node labels are the node names provided in the workflow XML.
+
+This API returns `HTTP 400` when run on a resource other than a workflow, viz. bundle and coordinator.
+
+#### Job Status
+
+An `HTTP GET` request that returns the current status (e.g. `SUCCEEDED`, `KILLED`, etc) of a given job.  If you are only interested
+in the status, and don't want the rest of the information that the `info` query provides, it is recommended to use this call
+as it is more efficient.
+
+**Request**
+
+```
+GET /oozie/v2/job/0000000-140908152307821-oozie-rkan-C?show=status
+```
+
+**Response**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  "status" : "SUCCEEDED"
+}
+```
+
+It accepts any valid Workflow Job ID, Coordinator Job ID, Coordinator Action ID, or Bundle Job ID.
+
+#### Changing job SLA definition and alerting
+An `HTTP PUT` request to change job SLA alert status/SLA definition.
+
+   * All sla commands takes actions-list or date parameter.
+   * `date`: a comma-separated list of date ranges. Each date range element is specified with dates separated by `::`
+   * `action-list`: a comma-separated list of action ranges. Each action range is specified with two action numbers separated by `-`
+   * For bundle jobs additional `coordinators` (coord_name/id) parameter can be passed.
+   * Sla change command need extra parameter `value` to specify new sla definition.
+   * Changing SLA definition
+
+   SLA definition of should-start, should-end, nominal-time and max-duration can be changed.
+
+
+```
+PUT /oozie/v2/job/0000003-140319184715726-oozie-puru-C?action=sla-change&value=<key>=<value>;...;<key>=<value>
+```
+
+   * Disabling SLA alert
+
+
+```
+PUT /oozie/v2/job/0000003-140319184715726-oozie-puru-C?action=sla-disable&action-list=3-4
+```
+Will disable SLA alert for actions 3 and 4.
+
+
+```
+PUT /oozie/v1/job/0000003-140319184715726-oozie-puru-C?action=sla-disable&date=2009-02-01T00:10Z::2009-03-01T00:10Z
+```
+Will disable SLA alert for actions whose nominal time is in-between 2009-02-01T00:10Z 2009-03-01T00:10Z (inclusive).
+
+
+
+```
+PUT /oozie/v1/job/0000004-140319184715726-oozie-puru-B?action=sla-disable&date=2009-02-01T00:10Z::2009-03-01T00:10Z&coordinators=abc
+```
+For bundle jobs additional coordinators (list of comma separated coord_name/id) parameter can be passed.
+
+   * Enabling SLA alert
+
+
+```
+PUT /oozie/v2/job/0000003-140319184715726-oozie-puru-C?action=sla-enable&action-list=1,14,17-20
+```
+Will enable SLA alert for actions 1,14,17,18,19,20.
+
+### Getting missing dependencies of coordinator action(s)
+
+
+```
+GET oozie/v2/job/0000000-170104115137443-oozie-puru-C?show=missing-dependencies&action-list=1,20
+```
+
+**Response**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+"missingDependencies":
+[{
+        "blockedOn": "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/00/00/_SUCCESS",
+        "dataSets":
+        [
+            {
+                "missingDependencies":
+                [
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/00/00/_SUCCESS"
+                ],
+                "dataSet": "input-2"
+            }
+        ],
+        "id": 1
+    },
+    {
+        "blockedOn": "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/20/00/_SUCCESS",
+        "dataSets":
+        [
+            {
+                "missingDependencies":
+                [
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/20/00/_SUCCESS",
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/19/40/_SUCCESS",
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/19/20/_SUCCESS",
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/19/00/_SUCCESS",
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/18/40/_SUCCESS",
+                    "hdfs://localhost:9000/user/purushah/examples/input-data/rawLogs/2010/01/01/18/20/_SUCCESS"
+                ],
+                "dataSet": "input-2"
+            }
+        ],
+        "id": 20
+    }]
+}
+```
+#### Jobs Information
+
+A HTTP GET request retrieves workflow and coordinator jobs information.
+
+**Request:**
+
+
+```
+GET /oozie/v1/jobs?filter=user%3Dbansalm&offset=1&len=50&timezone=GMT
+```
+
+Note that the filter is URL encoded, its decoded value is `user=bansalm`.
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  offset: 1,
+  len: 50,
+  total: 1002,
+**jobs: [
+    {
+**    jobType: "workflow"
+      id: "0-200905191240-oozie-W",
+      appName: "indexer-workflow",
+      appPath: "hdfs://user/tucu/indexer-wf",
+      user: "bansalm",
+      group: "other",
+      status: "RUNNING",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: null,
+      info: "run=0",
+    },
+    {
+**    jobType: "coordinator"
+      id: "0-200905191240-oozie-C",
+      appName: "logprocessor-coord",
+      appPath: "hdfs://user/bansalm/myapp/logprocessor-coord.xml",
+      user: "bansalm",
+      group: "other",
+      status: "RUNNING",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 31 Dec 2009 00:00:00 GMT",
+      info: "nextAction=5",
+    },
+    {
+**    jobType: "bundle"
+      id: "0-200905191240-oozie-B",
+      appName: "logprocessor-bundle",
+      appPath: "hdfs://user/bansalm/myapp/logprocessor-bundle.xml",
+      user: "bansalm",
+      group: "other",
+      status: "RUNNING",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 31 Dec 2009 00:00:00 GMT",
+    },
+    ...
+  ]
+}
+```
+
+No action information is returned when querying for multiple jobs.
+
+
+The syntax for the filter is  `[NAME=VALUE][;NAME=VALUE]*`
+
+Valid filter names are:
+
+   * text: any text that might be a part of application name or a part of user name or a complete job ID
+   * name: the application name from the workflow/coordinator/bundle definition
+   * user: the user who submitted the job
+   * group: the group for the job (support for the group filter is discontinued. version: 3.2.0 OOZIE-228).
+   * id: the id of the workflow/coordinator/bundle job
+   * status: the status of the job
+   * startCreatedTime : the start of the window about workflow job's created time
+   * endCreatedTime : the end of above window
+   * sortby: order the results. Supported values for `sortby` are: `createdTime` and `lastModifiedTime`
+
+The query will do an AND among all the filter names.
+
+The query will do an OR among all the filter values for the same name. Multiple values must be specified as different
+name value pairs.
+
+Additionally the `offset` and `len` parameters can be used for pagination. The start parameter is base 1.
+
+Moreover, the `jobtype` parameter could be used to determine what type of job is looking for.
+The valid values of job type are: `wf`, `coordinator` or `bundle`.
+
+startCreatedTime and endCreatedTime should be specified either in **ISO8601 (UTC)** format **(yyyy-MM-dd'T'HH:mm'Z')** or
+a offset value in days or hours or minutes from the current time. For example, -2d means the (current time - 2 days),
+-3h means the (current time - 3 hours), -5m means the (current time - 5 minutes).
+
+#### Bulk modify jobs
+
+A HTTP PUT request can kill, suspend, or resume all jobs that satisfy the url encoded parameters.
+
+**Request:**
+
+
+```
+PUT /oozie/v1/jobs?action=kill&filter=name%3Dcron-coord&offset=1&len=50&jobtype=coordinator
+```
+
+This request will kill all the coordinators with name=cron-coord up to 50 of them.
+
+Note that the filter is URL encoded, its decoded value is `name=cron-coord`.
+
+The syntax for the filter is  `[NAME=VALUE][;NAME=VALUE]*`
+
+Valid filter names are:
+
+   * name: the application name from the workflow/coordinator/bundle definition
+   * user: the user that submitted the job
+   * group: the group for the job
+   * status: the status of the job
+
+The query will do an AND among all the filter names.
+
+The query will do an OR among all the filter values for the same name. Multiple values must be specified as different
+name value pairs.
+
+Additionally the `offset` and `len` parameters can be used for pagination. The start parameter is base 1.
+
+Moreover, the `jobtype` parameter could be used to determine what type of job is looking for.
+The valid values of job type are: `wf`, `coordinator` or `bundle`
+
+**Response:**
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  offset: 1,
+  len: 50,
+  total: 2,
+**jobs: [
+    {
+**    jobType: "coordinator"
+      id: "0-200905191240-oozie-C",
+      appName: "cron-coord",
+      appPath: "hdfs://user/bansalm/app/cron-coord.xml",
+      user: "bansalm",
+      group: "other",
+      status: "KILLED",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 31 Dec 2009 00:00:00 GMT",
+      info: "nextAction=5",
+    },
+    {
+**    jobType: "coordinator"
+      id: "0-200905191240-oozie-C",
+      appName: "cron-coord",
+      appPath: "hdfs://user/bansalm/myapp/cron-coord.xml",
+      user: "bansalm",
+      group: "other",
+      status: "KILLED",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 31 Dec 2009 00:00:00 GMT",
+    },
+    ...
+  ]
+}
+```
+
+
+```
+PUT /oozie/v1/jobs?action=suspend&filter=status%3Drunning&offset=1&len=50&jobtype=wf
+```
+
+This request will suspend all the workflows with status=running up to 50 of them.
+Note that the filter is URL encoded, its decoded value is `status=running`.
+
+**Response:**
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  offset: 1,
+  len: 50,
+  total: 50,
+**jobs: [
+    {
+**    jobType: "workflow"
+      id: "0-200905191240-oozie-W",
+      appName: "indexer-workflow",
+      appPath: "hdfs://user/tucu/indexer-wf",
+      user: "bansalm",
+      group: "other",
+      status: "SUSPENDED",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: null,
+      info: "run=0",
+    },
+    {
+**    jobType: "workflow"
+      id: "0-200905191240-oozie-W",
+      appName: "logprocessor-wf",
+      appPath: "hdfs://user/bansalm/myapp/workflow.xml",
+      user: "bansalm",
+      group: "other",
+      status: "SUSPENDED",
+      createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      endTime: null,
+      info: "run=0",
+    },
+    ...
+  ]
+}
+```
+
+#### Jobs information using Bulk API
+
+A HTTP GET request retrieves a bulk response for all actions, corresponding to a particular bundle, that satisfy user specified criteria.
+This is useful for monitoring purposes, where user can find out about the status of downstream jobs with a single bulk request.
+The criteria are used for filtering the actions returned. Valid options (_case insensitive_) for these request criteria are:
+
+   * **bundle**: the application name from the bundle definition
+   * **coordinators**: the application name(s) from the coordinator definition.
+   * **actionStatus**: the status of coordinator action (Valid values are WAITING, READY, SUBMITTED, RUNNING, SUSPENDED, TIMEDOUT, SUCCEEDED, KILLED, FAILED)
+   * **startCreatedTime**: the start of the window you want to look at, of the actions' created time
+   * **endCreatedTime**: the end of above window
+   * **startScheduledTime**: the start of the window you want to look at, of the actions' scheduled i.e. nominal time.
+   * **endScheduledTime**: the end of above window
+
+Specifying 'bundle' is REQUIRED. All the rest are OPTIONAL but that might result in thousands of results depending on the size of your job. (pagination comes into play then)
+
+If no 'actionStatus' values provided, by default KILLED,FAILED will be used.
+For e.g if the query string is only "bundle=MyBundle", the response will have all actions (across all coordinators) whose status is KILLED or FAILED
+
+The query will do an AND among all the filter names, and OR among each filter name's values.
+
+
+The syntax for the request criteria is  `[NAME=VALUE][;NAME=VALUE]*`
+
+For 'coordinators' and 'actionStatus', if user wants to check for multiple values, they can be passed in a comma-separated manner.
+**Note**: The query will do an OR among them. Hence no need to repeat the criteria name
+
+All the time values should be specified in **ISO8601 (UTC)** format i.e. **yyyy-MM-dd'T'HH:mm'Z'**
+
+Additionally the `offset` and `len` parameters can be used as usual for pagination. The start parameter is base 1.
+
+If you specify a coordinator in the list, that does not exist, no error is thrown; simply the response will be empty or pertaining to the other valid coordinators.
+However, if bundle name provided does not exist, an error is thrown.
+
+**Request:**
+
+
+```
+GET /oozie/v1/jobs?bulk=bundle%3Dmy-bundle-app;coordinators%3Dmy-coord-1,my-coord-5;actionStatus%3DKILLED&offset=1&len=50
+```
+
+Note that the filter is URL encoded, its decoded value is `user=chitnis`. If typing in browser URL, one can type decoded value itself i.e. using '='
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  offset: 1,
+  len: 50,
+  total: 1002,
+**  bulkresponses: [
+**  {
+      bulkbundle:
+      {
+        bundleJobName: "my-bundle-app",
+        bundleJobId: "0-200905191240-oozie-B",
+        status: "SUSPENDED",
+      },
+      bulkcoord:
+      {
+        coordJobName: "my-coord-1",
+        status: "SUSPENDED",
+      },
+      bulkaction:
+      {
+        id: "0-200905191240-oozie-C@21",
+        coordJobId: "0-200905191240-oozie-C",
+        actionNumber: 21,
+        externalId: "job_00076_0009",
+        status: "KILLED",
+        externalStatus: "FAILED",
+        errorCode: "E0902",
+        errorMessage: "Input file corrupt",
+        createdTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+        nominalTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+        missingDependencies: "hdfs://nn:port/user/joe/file.txt"
+      },
+    },
+**  {
+      bulkbundle:
+      {
+        bundleJobName: "my-bundle-app",
+        bundleJobId: "0-200905191240-oozie-B",
+        status: "SUSPENDED",
+      }
+      bulkcoord:
+      {
+        coordJobName: "my-coord-5",
+        status: "SUSPENDED",
+      }
+      bulkaction:
+      {
+        id: "0-200905191245-oozie-C@114",
+        coordJobId: "0-200905191245-oozie-C",
+        actionNumber: 114,
+        externalId: "job_00076_0265",
+        status: "KILLED",
+        externalStatus: "KILLED",
+        errorCode: "E0603",
+        errorMessage: "SQL error in operation ...",
+        createdTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+        nominalTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+        missingDependencies:
+      }
+    }
+    ...
+  ]
+}
+```
+
+## Oozie Web Services API, V2 (Workflow , Coordinator And Bundle)
+
+The Oozie Web Services API is a HTTP REST JSON API.
+
+All responses are in `UTF-8`.
+
+Assuming Oozie is running at `OOZIE_URL`, the following web services end points are supported:
+
+   * \<OOZIE_URL\>/versions
+   * \<OOZIE_URL\>/v2/admin
+   * \<OOZIE_URL\>/v2/job
+   * \<OOZIE_URL\>/v2/jobs
+
+**Changes in v2 job API:**
+
+There is a difference in the JSON format of Job Information API (*/job) particularly for map-reduce action.
+No change for other actions.
+In v1, externalId and consoleUrl point to spawned child job ID, and externalChildIDs is null in map-reduce action.
+In v2, externalId and consoleUrl point to launcher job ID, and externalChildIDs is spawned child job ID in map-reduce action.
+
+v2 supports retrieving of JMS topic on which job notifications are sent
+
+**REST API URL:**
+
+
+```
+GET http://localhost:11000/oozie/v2/job/0000002-130507145349661-oozie-vira-W?show=jmstopic
+```
+
+**Changes in v2 admin API:**
+
+v2 adds support for retrieving JMS connection information related to JMS notifications.
+
+**REST API URL:**
+
+
+```
+GET http://localhost:11000/oozie/v2/admin/jmsinfo
+```
+
+v2/jobs remain the same as v1/jobs
+
+### Job and Jobs End-Points
+
+#### Job Information
+
+A HTTP GET request retrieves the job information.
+
+**Request:**
+
+
+```
+GET /oozie/v2/job/job-3?show=info&timezone=GMT
+```
+
+**Response for a workflow job:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+**jobType: "workflow",
+  id: "0-200905191240-oozie-W",
+  appName: "indexer-workflow",
+  appPath: "hdfs://user/bansalm/indexer.wf",
+  externalId: "0-200905191230-oozie-pepe",
+  user: "bansalm",
+  group: "other",
+  status: "RUNNING",
+  conf: "<configuration> ... </configuration>",
+  createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+  startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+  endTime: null,
+  run: 0,
+  actions: [
+    {
+      id: "0-200905191240-oozie-W@indexer",
+      name: "indexer",
+      type: "map-reduce",
+      conf: "<configuration> ...</configuration>",
+      startTime: "Thu, 01 Jan 2009 00:00:00 GMT",
+      endTime: "Fri, 02 Jan 2009 00:00:00 GMT",
+      status: "OK",
+      externalId: "job-123-200903101010",
+      externalStatus: "SUCCEEDED",
+      trackerUri: "foo:8021",
+      consoleUrl: "http://foo:50040/jobdetailshistory.jsp?jobId=job-123-200903101010",
+      transition: "reporter",
+      data: null,
+      stats: null,
+      externalChildIDs: "job-123-200903101011"
+      errorCode: null,
+      errorMessage: null,
+      retries: 0
+    },
+    ...
+  ]
+}
+```
+
+#### Managing a Job
+##### Ignore a Coordinator Job or Action
+
+A ignore request is done with an HTTP PUT request with a `ignore`
+
+The `type` parameter supports `action` only.
+The `scope` parameter can contain coordinator action id(s) to be ignored.
+Multiple action ids can be passed to the `scope` parameter
+
+**Request:**
+
+Ignore a coordinator job
+
+```
+PUT /oozie/v2/job/job-3?action=ignore
+```
+
+Ignore coordinator actions
+
+```
+PUT /oozie/v2/job/job-3?action=ignore&type=action&scope=3-4
+```
+
+### Validate End-Point
+
+This endpoint is to validate a workflow, coordinator, bundle XML file.
+
+#### Validate a local file
+
+**Request:**
+
+
+```
+POST /oozie/v2/validate?file=/home/test/myApp/workflow.xml
+Content-Type: application/xml;charset=UTF-8
+.
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<workflow-app xmlns="uri:oozie:workflow:0.3" name="test">
+    <start to="shell"/>
+    <action name="shell">
+        <shell xmlns="uri:oozie:shell-action:0.3">
+            <job-tracker>${jobTracker}</job-tracker>
+            <name-node>${nameNode}</name-node>
+            <exec>script.sh</exec>
+            <argument></argument>
+            <file>script.sh</file>
+            <capture-output/>
+        </shell>
+        <ok to="end"/>
+        <error to="fail"/>
+    </action>
+    <kill name="fail">
+        <message>failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
+    </kill>
+    <end name="end"/>
+</workflow-app>
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  validate: "Valid workflow-app"
+}
+```
+
+#### Validate a file in HDFS
+
+You can validate a workflow, coordinator, bundle XML file in HDFS. The XML file must already exist in HDFS.
+
+**Request:**
+
+
+```
+POST /oozie/v2/validate?file=hdfs://localhost:8020/user/test/myApp/workflow.xml
+Content-Type: application/xml;charset=UTF-8
+.
+```
+
+**Response:**
+
+
+```
+HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+.
+{
+  validate: "Valid workflow-app"
+}
+```
+
+
+
+
+
+
+
+