使用mapreducev2,当所有任务完成时,从map或reduce任务输出的输出数据将保存在本地磁盘或hdfs中。
因为任务在不同的时间结束,所以我希望数据是作为任务完成来写的。例如,任务0完成并写入输出,但任务1和任务2仍在运行。现在task2finish输出已写入,而task1仍在运行。最后,任务1完成并写入最后一个输出。但这不会发生。只有当所有任务完成时,输出才会出现在本地磁盘或hdfs中。
我想在生成数据时访问任务输出。在所有任务完成之前,输出数据在哪里?
更新
在我设置好这些参数之后 mapred-site.xml
```
mapreduce.task.files.preserve.failedtaskstrue
mapreduce.task.files.preserve.filepattern*
而这些女人 `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
```
hadoop.tmp.dir /tmp/hadoop-temp
但是我仍然找不到中间输出或最终输出的保存位置,因为它们是由任务生成的。
我已经列出了所有目录 `hdfs dfs -ls -R /` 而在 `tmp` dir我只找到了作业配置文件。
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条答案
按热度按时间dwthyt8l1#
任务的输出put在
<output dir>/_temporary/1/_temporary
.b4lqfgs42#
hdfs/tmp目录主要用作mapreduce操作期间的临时存储。mapreduce工件、中间数据等将保存在此目录下。这些文件将在mapreduce作业执行完成时自动清除。如果删除此临时文件,可能会影响当前正在运行的mapreduce作业。
vhmi4jdf3#
来自此stackoverflow链接的答案:
依赖临时文件不是一个好的做法,临时文件的位置和格式可以在发布之间随时更改。
不管怎样,设置
mapreduce.task.files.preserve.failedtasks
为true将保留所有失败任务和设置的临时文件mapreduce.task.files.preserve.filepattern
无论任务成功或失败,任务id的to regex都将保留匹配模式的临时文件。在同一个帖子里还有更多的信息。