有人能举一个例子说明在调用filesystem.create()时如何实现progressible接口吗?我在另一篇文章中看到了以下代码片段,但没有显示BytesWrite的来源:
OutputStream os = hdfs.create( file,
new Progressable() {
public void progress() {
out.println("...bytes written: [ "+bytesWritten+" ]");
} });
这个接口的文档说它是用来向hadoop框架报告进度的,以避免在长时间操作的情况下超时,但是“hadoop:the definal guide”说它是用来通知应用程序正在将数据写入数据节点的进度的,因为这是一个创建过程,所以没有多大意义。
谢谢,rf
2条答案
按热度按时间hsvhsicv1#
我应该进一步阅读hadoop的书--下面是他们稍后给出的示例:
随附的文本说“我们通过每次hadoop调用progress()方法时打印一个句点来说明进度,这是在每个64KB的数据包写入datanode管道之后”。
我想我的问题变成了,这个“显式地向hadoop框架报告进度”是如何在progressible文档中声明的?
qhhrdooz2#
如果你有一个
Mapper
在这里map()
可能需要很长时间(比如超过几分钟),然后你可以定期打电话progress()
在提供的context对象上,让hadoop知道您的代码没有挂起。这就是他们所说的“显式报告进度”的意思——当您使用由框架提供的对象实现Progressable
,当您编写自己的Progressable
.