Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Oozie shell运行的jar写入文件_Java_Hadoop_Cloudera_Oozie_Hue - Fatal编程技术网

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>