【发布时间】:2018-12-25 05:38:10
【问题描述】:
做的时候:
new MiniDFSCluster.Builder(config).build()
我得到了这个例外:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:557)
at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:996)
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:490)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:308)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:202)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:536)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:595)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:762)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:746)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1438)
at org.apache.hadoop.hdfs.MiniDFSCluster.createNameNode(MiniDFSCluster.java:1107)
at org.apache.hadoop.hdfs.MiniDFSCluster.createNameNodesAndSetConf(MiniDFSCluster.java:978)
at org.apache.hadoop.hdfs.MiniDFSCluster.initMiniDFSCluster(MiniDFSCluster.java:807)
at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:467)
at org.apache.hadoop.hdfs.MiniDFSCluster$Builder.build(MiniDFSCluster.java:426)
我想使用 Hadoop Minicluster 测试我的 Hadoop HDFS(它不会引发此异常,请参阅 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0)。
在我的 Maven pom.xml 中,我有这些依赖项:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<!-- for unit testing -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
</dependency>
<!-- for unit testing -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
<scope>test</scope>
<classifier>tests</classifier>
</dependency>
我明白了,我不需要特定的“hadoop-minicluster”依赖项,因为上面包含的 hadoop-hdfs 已经附带了它。
我正在尝试在我的 @BeforeAll 中构建 MiniDFSCluster。
我为构建器使用了不同的配置:
config = new HdfsConfiguration(); / config = new Configuration();
以及为 baseDir 创建路径的不同方法:
config.set(miniDfsClusterHD.HDFS_MINIDFS_BASEDIR, baseDir);
另外,我在 v2.6.0 中下载了 hadoop.dll 和 hdfs.dll 和 winuntils.exe,并在我的环境变量中添加了路径。
我研究了我可以在 stackoverflow 中找到的所有相关问题(显然没有成功)以及我可以在互联网上找到的所有指南和代码示例(有一些,它们的做法都不同。)
能不能帮帮我,我没办法了。
更新:
我正在使用以下 VM 选项运行测试(我认为这不是必需的):
-Dhadoop.home.dir=C:/Temp/hadoop
-Djava.library.path=C:/Temp/hadoop/bin
我也尝试直接设置环境变量(使用VM选项时应该不需要):
System.setProperty("hadoop.home.dir", "C:\\Temp\\hadoop-2.6.0");
System.setProperty("java.library.path", "C:\\Temp\\hadoop-2.6.0\\bin");
【问题讨论】:
-
这里有同样的问题。你能解决它吗?
-
不,我没有,我想:-/
-
在我的情况下,我注意到设置以下 VM 选项:-Djava.library.path=C:/Temp/hadoop/bin 解决了以下问题使用 IntelliJ 的 runner 运行测试。但在使用 mvn test 时却没有
标签: java maven hadoop hdfs junit5