복붙노트

[HADOOP] MiniDFSCluster UnsatisfiedLinkError를 org.apache.hadoop.io.nativeio.NativeIO $ Windows.access0

HADOOP

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

때하고는 :

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)

내 하둡 HDFS를 테스트하기 위해 하둡 Minicluster를 사용하려면 (: org.apache.hadoop.io.nativeio.NativeIO $ Windows.createDirectoryWithMode0이 예외를 포기하지 않는,에서 java.lang.UnsatisfiedLinkError 참조).

내 메이븐의 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>

나는 이미 위의 포함 하둡 HDFS와 함께 제공 나는 특정 '하둡 - minicluster'의존 할 필요가 없습니다, 이해했다.

내 @BeforeAll에 MiniDFSCluster 구축을 위해 노력하고 있습니다.

나는 빌더의 다른 CONFIGS을 사용하고 있습니다 :

config = new HdfsConfiguration(); / config = new Configuration();

그리고 다른 방법은 기본 디렉토리에 대한 경로를 만들 수 있습니다 :

config.set(miniDfsClusterHD.HDFS_MINIDFS_BASEDIR, baseDir);

또한, 나는 v2.6.0에서 hadoop.dll 및 hdfs.dll 및 winuntils.exe를 다운로드 및 내 환경 변수들에 대한 경로를 추가했다.

나는 유래에서 찾을 수있다 (성공없이, 명백하게) 모든 가이드 및 코드 예제는 내가 인터넷에서 찾을 수있는 모든 관련 문제를 연구 (거기에 몇 가지 그들은 모두 다르게 해.)

어떻게 든 좀 도와 주시겠습니까, 나는 밖으로 아이디어입니다.

최신 정보:

나는 (필요는 없습니다, 내가 생각하는) 다음 VM 옵션으로 테스트를 실행하고 있습니다 :

-Dhadoop.home.dir = C / 온도 / 하둡 -Djava.library.path = C : / 온도 / 하둡 / 빈

또한합니다 (VM 옵션을 사용할 때 필요하지 않을해야하는) 직접 환경 변수를 설정하려고 :

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

해결법

    from https://stackoverflow.com/questions/51382722/minidfscluster-unsatisfiedlinkerror-org-apache-hadoop-io-nativeio-nativeiowindo by cc-by-sa and MIT license