gpt4 book ai didi

streaming - 从失败的 Hadoop 作业中恢复标准输出

转载 作者:可可西里 更新时间:2023-11-01 16:20:32 25 4
gpt4 key购买 nike

我正在运行一个大型 Hadoop 流作业,我在其中处理大量文件,每个文件都作为一个单元处理。为此,我对流式传输作业的输入是一个文件,其中所有文件名的列表在不同的行上。

总的来说,这很有效。然而,我遇到了一个问题,当 Hadoop 遇到一些有问题的文件并且由于某种原因它似乎使整个工作崩溃时,我部分完成了一项大型工作(~36%)。如果作业成功完成,则打印到标准输出的内容将是每个文件完成时的一行,以及处理每个文件的程序中的一些统计信息。但是,对于这个失败的作业,当我尝试查看本应发送到标准输出的输出时,它是空的。我知道大约有 36% 的文件已被处理(因为我正在将数据保存到数据库中),但要生成一个列表以列出哪些文件已成功处理以及哪些文件已保留,这对我来说并不容易。有没有办法将此日志记录恢复到标准输出?

我能做的一件事是查看所有已完成/失败任务的日志文件,但这对我来说似乎更难,我不确定如何以这种方式检索好/坏文件列表.

感谢您的任何建议。

最佳答案

Hadoop 在此处捕获 system.out 数据:

/mnt/hadoop/logs/userlogs/task_id

但是,我发现这不可靠,而且 Hadoop 作业通常不使用标准输出进行调试,而是使用计数器。

对于您的每个文档,您可以总结文档特征:如长度、正常 ascii 字符数、新行数。

然后,您可以有 2 个计数器:一个用于“好”文件的计数器,一个用于“坏”文件的计数器。

可能很容易注意到坏文件有一些共同点 [没有数据、数据太多,或者可能有一些不可打印的字符]。

最后,您显然必须在作业运行完成后查看结果。

当然,system.out 语句的问题是在不同机器上运行的作业无法集成它们的数据。计数器解决了这个问题 - 它们很容易集成到清晰准确的整体工作画面中。

当然,计数器的问题在于信息内容完全是数字,但是只要稍加创意,您就可以轻松找到以有意义的方式对数据进行定量描述的方法。

最坏情况:您确实需要文本调试,而且您不希望它出现在临时文件中

在这种情况下,您可以使用 MultipleOutputs 写出包含其他数据的辅助文件。您可以使用与处理 part-r-0000* 数据相同的方式将记录发送到这些文件。

最后,我想你会发现,具有讽刺意味的是,必须使用计数器的限制会增加你的工作的可读性:一旦你想到它,使用数字计数而不是原始的调试是非常直观的文本 --- 我经常发现,当我的大部分调试打印语句被简化为原始信息内容时,基本上只是计数器...

关于streaming - 从失败的 Hadoop 作业中恢复标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com