gpt4 book ai didi

java - MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

转载 作者:行者123 更新时间:2023-12-02 14:05:14 26 4
gpt4 key购买 nike

做的时候:

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 中可以找到的所有相关问题(显然没有成功)以及我可以在互联网上找到的所有指南和代码示例(有一些,但它们的做法都不同。)

请以某种方式帮助我,我没有主意。

更新:

我正在使用以下虚拟机选项运行测试(我认为这不是必需的):

-Dhadoop.home.dir=C:/Temp/hadoop
-Djava.library.path=C:/Temp/hadoop/bin

我还尝试直接设置环境变量(使用虚拟机选项时不需要这样做):

System.setProperty("hadoop.home.dir", "C:\\Temp\\hadoop-2.6.0");
System.setProperty("java.library.path", "C:\\Temp\\hadoop-2.6.0\\bin");

最佳答案

我通过下载源文件(org.apache.hadoop.io.nativeio.NativeIO.java)并修改中的行解决了这个问题函数访问(在您的情况下为 557)来自:

return access0(path, desiredAccess.accessRight());

return true;

关于java - MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com