使用java读取hdfs blk\ ux.meta文件

6rvt4ljy  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(427)

在hadoop的数据节点中,总是存在一个块文件,其中包含数据的原始字节,还有一个元数据文件,其中包含生成的戳记和 .meta 作为延伸。
我试着用vi打开元数据,它看起来像是乱七八糟的内容。我假设它是某种序列化的二进制格式。我看了一下hdfs的源代码 org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader 是最有可能读取元数据的方法。
我在本地下载了一个元文件,并在eclipse中编写了一些代码。

  1. package com.bw;
  2. import java.io.DataInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader;
  8. public class Test {
  9. public static void main(String[] args) {
  10. DataInputStream input = null;
  11. BlockMetadataHeader header = null;
  12. try {
  13. input = new DataInputStream(
  14. new FileInputStream("C:/Users/bw/Desktop/blk_1116668343556322736_1551688.meta"));
  15. } catch (FileNotFoundException e) {
  16. e.printStackTrace();
  17. }
  18. try {
  19. BlockMetadataHeader.readHeader(input);
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. System.out.println(header.getChecksum());
  24. }
  25. }

但是,语法是正确的,但是它错误了,出现了以下消息。

  1. java.io.IOException: Could not create DataChecksum of type 2 with bytesPerChecksum 512
  2. at org.apache.hadoop.util.DataChecksum.newDataChecksum(DataChecksum.java:86)
  3. at org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader(BlockMetadataHeader.java:100)
  4. at org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader(BlockMetadataHeader.java:75)
  5. at com.bwang.Test.main(Test.java:27)
  6. Exception in thread "main" java.lang.NullPointerException
  7. at com.bwang.Test.main(Test.java:32)

我搜索错误,几乎找不到任何有用的资源。有谁能帮我读取块元数据文件的元数据吗?
毕竟,更新是元文件版本和maven-hadoop版本之间的不匹配。

  1. # hadoop version
  2. Hadoop 2.0.0-cdh4.6.0

然后我将maven pom文件更改为以下内容,它成功了

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.hadoop</groupId>
  4. <artifactId>hadoop-hdfs</artifactId>
  5. <version>2.4.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.hadoop</groupId>
  9. <artifactId>hadoop-common</artifactId>
  10. <version>2.4.0</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>jdk.tools</groupId>
  14. <artifactId>jdk.tools</artifactId>
  15. <version>1.7.0_05</version>
  16. <scope>system</scope>
  17. <systemPath>C:\Program Files\Java\jdk1.7.0_55\lib\tools.jar</systemPath>
  18. </dependency>
  19. </dependencies>
4xy9mtcn

4xy9mtcn1#

可能是因为您正在对更高版本的元数据文件使用hadoop pre-0.23.0库吗?
类型2是3年前作为hadoop-7443的一部分在datachecksum中引入的
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/datachecksum.java?r1=1146111&r2=1146300.

相关问题