我是新手使用Hadoop,在推荐一本书时,我看到了许多可互换使用OutputStream
和FSDataOutputStream
与HDFS文件系统交互的示例。有人能简单解释一下这两个类之间的区别吗?
答案 0 :(得分:1)
Apache Hadoop使用FSDataOutputStream
类来层叠JDK DataOutputStream
上的其他功能。浏览JavaDocs,我们可以看到子类中定义了一些其他方法:
getPos()
:返回流中的当前位置。hflush()
:特定于HDFS的添加,允许调用者刷新文件数据并使其对同一文件的并发读者可见。hsync()
:特定于HDFS的添加,允许调用者将文件数据刷新/同步到DataNode的底层磁盘以保持持久性。setDropBehind(Boolean)
:控制在DataNode上使用fadvise
系统调用,以便在读取后从缓冲区缓存中驱逐块数据。所有这些功能都没有在基本流类中定义,但有助于Hadoop内部和应用程序实现所需的语义并提高性能。此功能的显着用户包括Hadoop作业历史记录跟踪和HBase。
通常,应用程序代码使用最抽象的类来避免与特定子类的紧密耦合是一种很好的做法。这可能解释了使用OutputStream
的代码示例。如果不需要FSDataOutputStream
的额外功能,则无需参考它。