2

我想SequenceFile从客户端应用程序中读取来自 HDFS 的特定内容。我可以通过使用来做到这一点SequenceFile.Reader,它工作正常。但是是否也可以通过分析抛出的s来检查文件是否是其他文件SequenceFileIOException

4

1 回答 1

2

我翻遍了 Hadoop 文档、源代码和网络并找到了一个解决方案:SequenceFile从一个四字节标题开始读取文件的版本SEQn在哪里n(一个正数,一字节数字,但从不大于 6)。因此,对于检查,可以执行以下操作:

  1. FSDataInputStream正常打开文件FileSystem.open
  2. 将前三个字节读取为 ASCII 字符串
  3. 检查他们是否说SEQ- 如果没有,不SequenceFile
  4. 检查下一个字节是否小于等于6,大于0,如果是->SequenceFile

这应该是 SequenceFile 中的一个实用方法,例如SequenceFile.isSequenceFile

编辑:我发布了一个关于这个的 JIRA:HDFS-7378

于 2014-11-07T12:30:13.557 回答