Java 使用org.apache.hadoop.utilProgressable接口

Java 使用org.apache.hadoop.utilProgressable接口,java,hadoop,hdfs,Java,Hadoop,Hdfs,有人能举例说明调用FileSystem.create()时如何实现Progressible接口吗?我在另一篇文章中看到了以下代码片段,但没有显示BytesWrite的来源: OutputStream os = hdfs.create( file, new Progressable() { public void progress() { out.println("...bytes written: [ "+bytesWritten+" ]");

有人能举例说明调用FileSystem.create()时如何实现Progressible接口吗?我在另一篇文章中看到了以下代码片段,但没有显示BytesWrite的来源:

OutputStream os = hdfs.create( file,
    new Progressable() {
        public void progress() {
            out.println("...bytes written: [ "+bytesWritten+" ]");
        } });
该接口的文档称其用于向Hadoop框架报告进度,以避免在长时间操作的情况下超时,但“Hadoop:The Definitive Guide”称其用于通知应用程序将数据写入数据节点的进度,因为这是一个创建过程,所以没有多大意义


谢谢,RF

我应该进一步阅读Hadoop的书——下面是他们稍后给出的示例:

            OutputStream    out =   fs.create(new   Path(dst),  new Progressable()  {
                    public  void    progress()  {
                            System.out.print(".");
                    }
随附文本说:“我们说明了进展情况 通过每次Hadoop调用progress()方法时打印一个句点,即在每个64KB数据包写入datanode管道之后”


我想我的问题是,如何按照Progressible文档中的说明“明确地向Hadoop框架报告进度?”

我应该进一步阅读Hadoop书籍——下面是他们稍后给出的示例:

            OutputStream    out =   fs.create(new   Path(dst),  new Progressable()  {
                    public  void    progress()  {
                            System.out.print(".");
                    }
随附文本说:“我们说明了进展情况 通过每次Hadoop调用progress()方法时打印一个句点,即在每个64KB数据包写入datanode管道之后”


我想我的问题是,如何按照Progressible文档中的说明“显式地向Hadoop框架报告进度?”

如果您有一个
Mapper
的实现,调用
map()
可能需要很长时间(比如超过几分钟),那么您可以定期调用
progress()
,让Hadoop知道您的代码没有挂起。这就是他们所说的“显式报告进度”的意思——当您使用由框架提供的、实现了
progressible
的对象时,它就起作用了,当您编写自己的
progressible

实现时,它显然不能以这种方式工作。如果您有一个
Mapper
的实现,其中调用
map()
可能需要很长时间(比如超过几分钟),那么您可以定期调用
progress()
,让Hadoop知道您的代码没有挂起。这就是他们所谓的“显式报告进度”的意思——当您使用由实现
progressible
的框架提供的对象时,它会起作用,当您编写自己的
progressible
实现时,它显然不会起作用