Search code examples
bashdockerhadoopclouderaoozie

Oozie Shell Action fails to run Docker container


On a cluster with Hadoop 3.0.0-cdh6.2.0 I'm trying to run a Docker container via a Shell Action of a Oozie's workflow.

Docker is correctly installed on each node of the cluster. If I connect via ssh to a node and I try to launch a Docker command, everything works properly. I want to schedule the same things I can do manually with Oozie, make it open a shell on a node of the cluster and run some Docker commands.

If I try to launch a simple Docker command like docker ps or docker run hello-world in a shell action or inside a bash script launched by Oozie, the job fails and the error I can retrieve from the application logs is:

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.oozie.action.hadoop.LauncherAM.runActionMain(LauncherAM.java:410)
        at org.apache.oozie.action.hadoop.LauncherAM.access$300(LauncherAM.java:55)
        at org.apache.oozie.action.hadoop.LauncherAM$2.run(LauncherAM.java:223)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
        at org.apache.oozie.action.hadoop.LauncherAM.run(LauncherAM.java:217)
        at org.apache.oozie.action.hadoop.LauncherAM$1.run(LauncherAM.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
        at org.apache.oozie.action.hadoop.LauncherAM.main(LauncherAM.java:141)
Caused by: org.apache.oozie.action.hadoop.LauncherMainException
        at org.apache.oozie.action.hadoop.ShellMain.run(ShellMain.java:76)
        at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:104)
        at org.apache.oozie.action.hadoop.ShellMain.main(ShellMain.java:63)
        ... 16 more
Failing Oozie Launcher, Main Class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]

The only commands that I tried that give the expected results in Stdoutput are docker version and docker help. I can't figure why an action that I can make manually on a shell doesn't work when launched by Oozie.


Solution

  • The script runs as user oozie. User Oozie might not have permissions to run docker operations. Add oozie to the docker group.