jason_cdl 2017-03-19 11:20
浏览 1785

hadoop 丢失数据文件问题

问题现象:
执行mapreduce程序(根据增量文件对全量文件实行更新操作)时,设置参数mapreduce.job.reduces=200,程序执行成功后,结果目录下面除了_SUCCESS文件外,总共只有198个文件(每个文件300多M),缺少文件part-r-00119及part-r-00125. 重新执行程序后,正确生成200个结果文件。

问题分析过程:
1. 查看8088界面,发现作业运行成功,200 个reduce task 均已成功执行,其中reduce_119及reduce_125 任务均为一次执行成功,没有出现failed及killed;
2. 查看yarn日志,根据File System Counters中记录信息,Reduce output records=212759958大于实际结果文件中的记录条数;
3. 查看reduce 119 task的日志信息,发现以下信息
2017-03-10 08:23:15,560 INFO [main] org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter: Saved output of task 'attempt_1478381467748_149540_r_000119_0' to hdfs://mycluster/XXX/XXX/XXX/20170227/_temporary/1/task_1478381467748_149540_r_000119
2017-03-10 08:23:15,620 INFO [main] org.apache.hadoop.mapred.Task: Task 'attempt_1478381467748_149540_r_000119_0' done.
上述信息表明reduce_119 task已经成功生成结果临时文件并将成功执行的状态返回给了APPMASTER;
4. 继续分析reduce_119 task的结果临时文件在之后为何会丢失。
到该task所运行的datanode节点找到该临时文件的某一BOLOCK NAME,并到namenode节点查看该块的所有操作信息,
发现2017-03-10 08:26时该块信息被删除(该task运行成功时间为2017-03-10 08:23,整个JOB运行成功时间为2017-03-10 09:30左右) PS:文件进行MV操作时,BOLOCK NAME不会发生变化;
5. 查看源码发现,task生成的结果临时文件被移动至目标结果目录采用的是rename操作;
6. 做了以下测试分析:
执行相同程序,在reduce_121 task执行成功后(整个job并未执行完成), 手动将该task生成的结果临时文件hdfs://mycluster/XXX/XXX/XXX/20170227/_temporary/1/task_1478381467748_149540_r_000121进行删除;神奇的事情发生了,整个job作业运行成功了,但是结果目录缺少了part-r-00121这个文件,且File System Counters中记录的输出结果信息是包含part-r-00121这个文件记录条数的

分析到了这里实在是不知道为啥结果临时文件的block信息被删除了,

跪求大神帮忙分析分析问题原因,为啥mapreduce执行过程中会丢失结果文件;
PS:
1. hadoop 版本:hadoop 2.2.0
2. 操作系统 red hat
3. 程序执行过程中,不存在人为删除reduce_119 和 reduce_125 task 临时结果文件的情况

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
    • ¥15 乘性高斯噪声在深度学习网络中的应用