使用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任务完成时产生的最终输出。
答案 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的正则表达式将保留匹配模式的临时文件,而不管任务成功或失败。
同一篇文章中还有更多信息。