我开发了一个使用ToolRunner
的MapReduce应用程序。根据用户传递的参数和配置属性,应用程序以某种方式设置作业:选择特定的输入/输出格式,选择映射器和化简器类等。这个逻辑是在我的主类的run(String[] args)
方法中实现的,该方法实现了Configured
和Tool
。
Oozie支持MapReduce动作节点,但问题是我不能将它们与我的自定义ToolRunner
应用程序一起使用。MapReduce操作仅允许通过配置输入/输出格式,映射器/化简器类和键/值类来定义静态作业。我的应用程序根据更高级别的业务逻辑动态执行此操作。
该操作应该能够执行类似以下命令行的内容:
hadoop jar my.jar com.example.MyMainClass -D my.config1=a -D my.config2=b arg1 arg2
我可以创建支持ToolRunner
MapReduce应用程序的Oozie操作吗?
是的,您可以使用 Java 操作。 不幸的是,这并不理想,因为 Oozie 创建了一个工作,然后运行您的ToolRunner
,从而创建自己的作业。 不过它确实有效。