这样做时:
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");
答案 0 :(得分:0)
我通过下载源文件(org.apache.hadoop.io.nativeio.NativeIO.java)并修改了 从以下位置访问功能(在您的情况下为557):
return access0(path, desiredAccess.accessRight());
到
return true;