Java 从Oozie shell运行的jar写入文件
我有Java 从Oozie shell运行的jar写入文件,java,hadoop,cloudera,oozie,hue,Java,Hadoop,Cloudera,Oozie,Hue,我有jar文件,在运行map reduce进程之前需要运行该文件。这将处理数据,稍后将其输入到map reduce进程。jar文件在没有oozie的情况下运行良好,但我喜欢自动化工作流 jarif运行应该接受两个输入:和 并且它应该在指定的下输出两个文件 这是工作流程: <workflow-app name="RI" xmlns="uri:oozie:workflow:0.4"> <start to="RI"/> <action name="RI"&
jar
文件,在运行map reduce进程之前需要运行该文件。这将处理数据,稍后将其输入到map reduce进程。jar
文件在没有oozie
的情况下运行良好,但我喜欢自动化工作流
jar
if运行应该接受两个输入:
和
并且它应该在指定的
下输出两个文件
这是工作流程:
<workflow-app name="RI" xmlns="uri:oozie:workflow:0.4">
<start to="RI"/>
<action name="RI">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>java </exec>
<argument>-jar</argument>
<argument>RI-Sequencer.jar </argument>
<argument>log.csv</argument>
<argument>/tmp</argument>
<file>/user/root/algo/RI-Sequencer.jar#RI-Sequencer.jar</file>
<file>/user/root/algo/log.csv#log.csv</file>
<capture-output/>
</shell>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
更新:
如果有帮助,我可以上传jar文件进行测试
更新2:
我已更改为将其写入HDFS。使用Oozie执行作业时仍不工作。独立运行作业是可行的。看起来您正在创建一个常规输出文件(在本地文件系统上,而不是在HDFS上)。由于作业将在集群的一个节点上运行,因此输出将在拾取的机器的本地/tmp上。我不明白您为什么要在mapreduce之前预处理数据。我觉得效果不太好。但正如Roamin所说,您正在将输出文件保存到本地文件系统中(文件应该在您的用户主文件夹中~/)。如果您想直接从java将数据保存到hdfs中(不使用mapreduce库),请查看此处或 最终,您可以将文件生成到本地目录,然后使用以下命令将其加载到HDFS中:
hdfs dfs -put <localsrc> ... <dst>
hdfs-dfs-put。。。
您可以在读取文件的地方共享代码,然后将文件写入hdfs吗?我的代码如上所述,我不打算将文件写入hdfs。我正在尝试将文件保存到本地。由于预处理无法并行完成(mapper reducer),因此我无法以MR方式保存文件。无论如何,我的目标是尽可能将其保存到本地文件系统中,这样我就不必重写代码将文件写入HDFS。正如@Romain所说,文件应该保存在/tmp
中,但是我似乎找不到文件。我在3个节点上运行测试,检查了所有节点,但什么也没找到。是的,它应该写入本地文件系统。但是,我无法在正在运行的所有三个节点中找到文件。
hdfs dfs -put <localsrc> ... <dst>