gpt4 book ai didi

java - 使用Hadoop时OutputStream和FSDataOutputStream有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 15:26:36 30 4
gpt4 key购买 nike

我是 Hadoop 的新手,在引用一本书时,我看到了一些可以互换使用 OutputStreamFSDataOutputStream 与 HDFS 文件系统交互的示例。谁能简要解释一下这两个类之间的区别?

最佳答案

Apache Hadoop 使用 FSDataOutputStream类在 JDK 上分层附加功能 DataOutputStream .浏览 JavaDocs,我们可以看到子类中定义了一些额外的方法:

  • getPos():返回流中的当前位置。
  • hflush():一种特定于 HDFS 的附加功能,允许调用者刷新文件数据并使其对同一文件的并发读取器可见。
  • hsync():一个特定于 HDFS 的附加功能,允许调用者将文件数据刷新/同步到 DataNode 的底层磁盘以实现持久性。
  • setDropBehind(Boolean):控制 fadvise 的使用DataNode 的系统调用以在读取后从缓冲区缓存中逐出 block 数据。

所有这些都是基本流类中未定义的功能,但有助于 Hadoop 内部和应用程序实现所需的语义并提高性能。此功能的著名用户包括 Hadoop 作业历史记录跟踪和 HBase。

一般来说,应用程序代码最好使用尽可能抽象的类以避免与特定子类的紧密耦合。这可能解释了使用 OutputStream 的代码示例。如果不需要 FSDataOutputStream 的额外功能,则无需引用它。

关于java - 使用Hadoop时OutputStream和FSDataOutputStream有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45265634/

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