获取导致mapreduce作业崩溃的数据

pokxtpni  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(290)

在很多情况下,我正在编写一个数据处理程序,而新的错误只会在更大的数据集上被发现。例如,假设一个脚本在1亿条记录中的1条上崩溃(由于意外输入或其他原因);如果我在一个小样本数据上开发它,我不会看到那个bug。我所能做的就是盯着hadoop的错误日志,调整脚本,然后重新运行整个作业。这在计算和开发人员时间上都是非常低效的。
我想要的是一种下载脚本崩溃时正在处理的数据段的方法。
有没有一个简单的方法可以从hadoop中得到这个(理想情况下,hadoop流媒体?)
几年前,我学会了一些可怕的技巧,在hadoop自己制作的temp目录中挖掘。。。不过,这似乎不是一个好的解决方案,我希望现在有更好的解决方案。

3pvhb19x

3pvhb19x1#

我想要的是一种下载脚本崩溃时正在处理的数据段的方法。
“keep.failed.task.files”描述是“是否应该保留失败任务的文件”。这应该只用于失败的作业,因为存储永远不会回收。它还可以防止Map输出在使用时从reduce目录中删除。”
默认为false。将此属性更改为true,并且在任务失败时数据应该可用。数据可以被送到开发人员的机器上,程序可以在eclipse中轻松调试。
我所能做的就是盯着hadoop的错误日志,调整脚本,然后重新运行整个作业。这在计算和开发人员时间上都是非常低效的。
另外,当hadoop作业遇到错误记录并且任务崩溃时,可以忽略该记录并重新运行map/reduce任务。不需要再次运行整个作业。有关更多详细信息,请查看此hadoop文档。

smdncfj3

smdncfj32#

我建议在setup()、map()、reduce()和cleanup()方法中的逻辑周围放置一个try-catch块。在exception increment的catch块中,一个计数器,其组是“exception”(或其他什么),其名称是从exception的getmessage()方法返回的字符串。那至少能让你一眼就知道发生了什么事。在catch块中,您还可以向文件中写入附加信息,包括堆栈跟踪、传入的键和值(或可说出的值)等。
对于调试,我也喜欢“调试为…->java应用程序“eclipse中的hadoop流。这帮助我发现并解决了代码中的一系列问题。

相关问题