【发布时间】:2018-08-15 18:06:11
【问题描述】:
在 Hadoop 的数据节点中,始终存在包含数据原始字节的块文件以及带有生成的标记和扩展名为 .meta 的元数据文件。
我试图在 vi 中打开元数据,它看起来像乱码内容。我假设它是某种序列化的二进制格式。看了HDFS的源码,感觉org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader是最有可能读取元数据的方法。
我在本地下载了一个元文件并在 Eclipse 中编写了一些代码。
package com.bw;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader;
public class Test {
public static void main(String[] args) {
DataInputStream input = null;
BlockMetadataHeader header = null;
try {
input = new DataInputStream(
new FileInputStream("C:/Users/bw/Desktop/blk_1116668343556322736_1551688.meta"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
BlockMetadataHeader.readHeader(input);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(header.getChecksum());
}
}
但是,语法是正确的,但它会出错并显示以下消息。
java.io.IOException: Could not create DataChecksum of type 2 with bytesPerChecksum 512
at org.apache.hadoop.util.DataChecksum.newDataChecksum(DataChecksum.java:86)
at org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader(BlockMetadataHeader.java:100)
at org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader.readHeader(BlockMetadataHeader.java:75)
at com.bwang.Test.main(Test.java:27)
Exception in thread "main" java.lang.NullPointerException
at com.bwang.Test.main(Test.java:32)
我搜索了错误,几乎找不到任何有用的资源。谁能帮我如何读取块元数据文件的元数据?
更新,毕竟是meta文件版本和maven Hadoop版本不匹配。
# hadoop version
Hadoop 2.0.0-cdh4.6.0
然后我将 maven pom 文件更改为以下内容,它可以工作
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.7.0_55\lib\tools.jar</systemPath>
</dependency>
</dependencies>
【问题讨论】: