map或reduce任务的临时输出数据在哪里

时间:2016-08-10 16:48:54

标签: hadoop mapreduce yarn hadoop-streaming

使用MapReduce v2,当所有任务完成时,从map或reduce任务发出的输出数据将保存在本地磁盘或HDFS中。

由于任务在不同时间结束,我期待数据被写为任务完成。例如,任务0完成,因此输出被写入,但任务1和任务2仍在运行。现在任务2完成输出写入,任务1仍在运行。最后,任务1完成并写入最后一个输出。但这不会发生。当所有任务完成时,输出仅出现在本地磁盘或HDFS中。

我想在生成数据时访问任务输出。所有任务完成之前输出数据在哪里?

更新

我在mapred-site.xml

中设置了这些参数后
<property><name>mapreduce.task.files.preserve.failedtasks</name><value>true</value></property>
<property><name>mapreduce.task.files.preserve.filepattern</name><value>*</value></property>

以及hdfs-site.xml

中的这些参数
<property> <name>dfs.name.dir</name> <value>/tmp/data/dfs/name/</value> </property>
<property> <name>dfs.data.dir</name> <value>/tmp/data/dfs/data/</value> </property>

这个值在core-site.xml

<property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-temp</value> </property>

但我仍然无法找到中间输出或最终输出保存的位置,因为它们是由任务产生的。

我列出了hdfs dfs -ls -R /tmp目录中的所有目录,我只找到了作业配置文件。

drwx------   - root supergroup          0 2016-08-11 16:17 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002
-rw-r--r--   1 root supergroup          0 2016-08-11 16:17 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/COMMIT_STARTED
-rw-r--r--   1 root supergroup          0 2016-08-11 16:17 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/COMMIT_SUCCESS
-rw-r--r--  10 root supergroup     112872 2016-08-11 16:14 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job.jar
-rw-r--r--  10 root supergroup       6641 2016-08-11 16:14 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job.split
-rw-r--r--   1 root supergroup        797 2016-08-11 16:14 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job.splitmetainfo
-rw-r--r--   1 root supergroup      88675 2016-08-11 16:14 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job.xml
-rw-r--r--   1 root supergroup     439848 2016-08-11 16:17 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job_1470912033891_0002_1.jhist
-rw-r--r--   1 root supergroup     105176 2016-08-11 16:14 /tmp/hadoop-yarn/staging/root/.staging/job_1470912033891_0002/job_1470912033891_0002_1_conf.xml

输出保存在哪里?我在讨论由任务生成时存储的输出,而不是所有map或reduce任务完成时产生的最终输出。

3 个答案:

答案 0 :(得分:1)

任务的输出放在<output dir>/_temporary/1/_temporary

答案 1 :(得分:0)

HDFS / tmp目录主要用作mapreduce操作期间的临时存储。 Mapreduce工件,中间数据等将保存在此目录下。 mapreduce作业执行完成后,这些文件将自动清除。如果删除此临时文件,则会影响当前运行的mapreduce作业。

答案 2 :(得分:-1)

来自this stackoverflow link的答案:

  

依赖临时文件不是一个好习惯,临时文件的位置和格式可能会在不同版本之间随时更改。

     

无论如何,将mapreduce.task.files.preserve.failedtasks设置为true将保留所有失败任务的临时文件,并将mapreduce.task.files.preserve.filepattern设置为任务ID的正则表达式将保留匹配模式的临时文件,而不管任务成功或失败。

同一篇文章中还有更多信息。