我想从客户端应用程序从HDFS读取特定的SequenceFile。我可以使用SequenceFile.Reader做到这一点,并且效果很好。但是通过分析抛出的SequenceFile s是否还可以检查文件是否是IOException呢?

最佳答案

我仔细研究了Hadoop文档,源代码和Web,找到了一个解决方案:SequenceFile s以一个四字节的 header 开头,读取SEQn,其中n是文件的版本(一个正数,一个字节的数字,但不得大于6)。因此,对于检查,可以执行以下操作:

  • 使用FSDataInputStream作为普通的FileSystem.open打开文件
  • 读取前三个字节作为ASCII字符串
  • 检查他们是否说SEQ-如果不是,则不输入SequenceFile
  • 检查下一个字节是否小于或等于6,并且大于0,如果是,则-> SequenceFile

  • 这应该是SequenceFile中的实用程序方法,例如SequenceFile.isSequenceFile
    编辑:我发布了关于此JIRA:HDFS-7378

    09-11 11:38