是否可以检查HDFS上的文件是否为SequenceFile而不使用(mis)使用异常?

时间:2014-11-07 11:43:24

标签: hadoop hdfs sequencefile

我想从客户端应用程序中读取HDFS中的特定SequenceFile。我可以使用SequenceFile.Reader来做到这一点,它运行正常。但也可以通过分析抛出的SequenceFile来检查 文件 是否只有IOException

1 个答案:

答案 0 :(得分:2)

我挖掘了Hadoop文档,源代码和Web并找到了一个解决方案:SequenceFile以一个四字节标题读取SEQn开头,其中n是文件的版本(一个正数,一个字节的数字,但绝不会超过6)。因此,对于检查,可以执行以下操作:

  1. 使用FSDataInputStream
  2. 以正常FileSystem.open打开文件
  3. 将前三个字节读为ASCII字符串
  4. 检查他们是否说SEQ - 如果没有,请SequenceFile
  5. 检查下一个字节是否小于或等于6,如果是,则检查是否大于0 - > SequenceFile
  6. 这应该是SequenceFile中的实用方法,例如SequenceFile.isSequenceFile

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