Oozie JavaAction:任务参数传递与自定义Java应用执行

需积分: 10 6 下载量 99 浏览量 更新于2024-09-07 收藏 122KB DOC 举报
Oozie-JavaAction是Apache Oozie工作流管理工具中的一个重要组件,用于在Hadoop集群环境中执行用户自定义的Java应用程序。JavaAction允许工作流将任务参数传递给下一个节点,并通过控制Java主类(main()方法)的执行来驱动整个流程。 1. **官网解释**: Oozie中的JavaAction是基于Hadoop MapReduce框架设计的,它会执行指定的主Java类的`public static void main(String[] args)`方法。这意味着,当在工作流中引用JavaAction时,Oozie实际上会启动一个单独的MapReduce作业,该作业包含一个Mapper任务,这个任务执行的是用户提供的Java代码。 2. **JavaAction使用步骤**: - **编写自定义功能**: 在自定义的Java类中,你需要实现一个main方法,这是JavaAction的核心执行逻辑。这个方法应该能够处理用户传递的参数,并根据需要进行操作。 - **workflow.xml文件**: 工作流定义文件中,需要配置JavaAction的相关信息,包括job-tracker(JobTracker地址)、name-node(NameNode地址)、主Java类的全限定名、JVM选项以及命令行参数。这些配置确保了JavaAction与Hadoop环境的连接和正确运行。 - **job.properties文件**: 可能还包括job.properties文件,用于存储更具体的属性,如输入输出路径等。 - **部署**:将编写的Java类、workflow.xml和job.properties文件部署到Oozie服务器,使其可供工作流调度。 - **运行**:Oozie工作流在提交后,会等待JavaAction执行完成,如果成功则继续执行后续动作;如果遇到错误或异常,工作流会按照预设的规则进行处理,如抛出异常会导致错误状态的转换,而优雅地退出则可能标记为正常结束。 3. **错误处理**: - 要指示一个正常的动作转换,Java主类必须在main方法调用中以预期的方式完成,避免直接调用`System.exit(int n)`,因为这可能导致错误状态,即使使用了特定的退出码。 - 如果主类抛出异常,则表示发生了错误,工作流会跳转到相应的错误动作。 4. **清理与重试**: JavaAction支持在执行前清理HDFS文件或目录,这在面对临时性或非临时性故障时非常有用。Oozie可以根据此特性自动重试Java应用程序,提高了任务的健壮性和可靠性。 Oozie-JavaAction是Hadoop生态系统中一种灵活的执行机制,它使得用户可以轻松地将复杂的业务逻辑封装为可重复使用的任务,并通过Oozie的工作流协调器进行任务调度和错误处理。这在处理大规模数据处理和分布式应用程序时,提供了强大的功能和高度的可扩展性。

Stdoutput Warning: /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail. Stdoutput Please set $ACCUMULO_HOME to the root of your Accumulo installation. Exit code of the Shell command 1 <<< Invocation of Shell command completed <<< 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:498) 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] Oozie Launcher, uploading action data to HDFS sequence file: hdfs://nameservice0/user/admin/oozie-oozi/0000118-230724100647793-oozie-oozi-W/shell-af10--shell/action-data.seq Stopping AM Callback notification attempts left 0 Callback notification trying http://nn.hdfs.offline:11000/oozie/callback?id=0000118-230724100647793-oozie-oozi-W@shell-af10&status=FAILED Callback notification to http://nn.hdfs.offline:11000/oozie/callback?id=0000118-230724100647793-oozie-oozi-W@shell-af10&status=FAILED succeeded Callback notification succeeded

214 浏览量