我在运行map reduce进程之前需要运行jar
文件。这将处理稍后将输入到地图缩减过程的数据。 jar
文件在没有oozie
的情况下正常工作,但我喜欢自动化工作流程。
jar
if运行时应接受两个输入:<input_file>
和<output_dir>
并且应该在指定的<output_file_1>
下输出两个文件<output_file_2>
,<output_dir>
。
这是工作流程:
<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>
我使用Hue
运行任务,目前我无法将进程的输出写入文件。它运行正常,但假定的文件无处可寻。
我还将输出目录更改为HDFS,但结果相同,不会生成任何文件。
如果有帮助,这是我的jar
文件中的代码示例:
File fileErr = new File(targetPath + "\\input_RI_err.txt");
fileErr.createNewFile();
textFileErr = new BufferedWriter(new FileWriter(fileErr));
//
// fill in the buffer with the result
//
textFileErr.close();
更新 如果有帮助,我可以上传jar文件进行测试。
更新2: 我已经改为让它写入HDFS。使用Oozie执行作业时仍然无法正常工作。独立运行工作。
答案 0 :(得分:2)
您似乎正在创建常规输出文件(在本地文件系统上,而不是HDFS)。当作业将在集群的一个节点上运行时,输出将位于所选机器的本地/ tmp上。
答案 1 :(得分:0)
我不明白你为什么要在mapreduce之前预处理数据。认为它不太有效。但正如Roamin所说,您将输出文件保存到本地文件系统中(文件应该在您的用户主文件夹中〜/)。如果您想直接从java将数据保存到hdfs(不使用mapreduce库),请查看此处 - How to write a file in HDFS using hadoop或Write a file in hdfs with java。
最终,您可以将文件生成到本地目录,然后使用以下命令将其加载到HDFS中:
hdfs dfs -put <localsrc> ... <dst>