win10 安装 hadoop 3.3.1报错 Unable to load native-hadoop library

安装好hadoop后, 配置了HADOOP_HOME, Path

命令行执行 hdfs dfs -ls /

报错

2022-10-24 21:00:12,070 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" 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:793)
        at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1215)
        at org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1420)
        at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:601)
        at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1972)
        at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:2014)
        at org.apache.hadoop.fs.ChecksumFileSystem.listStatus(ChecksumFileSystem.java:761)
        at org.apache.hadoop.fs.shell.PathData.getDirectoryContents(PathData.java:269)
        at org.apache.hadoop.fs.shell.Command.recursePath(Command.java:439)
        at org.apache.hadoop.fs.shell.Ls.processPathArgument(Ls.java:242)
        at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:286)
        at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:270)
        at org.apache.hadoop.fs.shell.FsCommand.processRawArguments(FsCommand.java:121)
        at org.apache.hadoop.fs.shell.Command.run(Command.java:177)
        at org.apache.hadoop.fs.FsShell.run(FsShell.java:327)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
        at org.apache.hadoop.fs.FsShell.main(FsShell.java:390)

解决方案

网上的很多方法,有点乱,找篇很细致的讲解放这里, 其实主要是没有启动hadoop

Spark | Hadoop - Exception in thread “main” java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z - Spark by {Examples}

下载winutils.exe , 参考下面这个链接,内部比较新

GitHub - kontext-tech/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows

下载 

winutils.exe, hadoop.dll 放到 %HADOOP_HOME%\bin 目录, 有时可能需要将 hadoop.dll  放到 C:/Windows/System32 目录, 我验证了一下, 只需要放在bin目录即可, 不可以仅放system32,仅放这里没效果, 放 %HADOOP_HOME%\bin 目录 很重要, 再将重启命令行执行 

hdfs dfs -ls /

仍然报错

C:\Users\HUAWEI>hdfs dfs -ls /
Found 21 items
2022-10-24 21:07:59,378 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: $Recycle.Bin
2022-10-24 21:07:59,422 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: $WinREAgent
2022-10-24 21:07:59,459 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Config.Msi
2022-10-24 21:07:59,493 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Config.Msi
2022-10-24 21:07:59,527 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Documents and Settings
2022-10-24 21:07:59,562 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: DumpStack.log.tmp
2022-10-24 21:07:59,595 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: DumpStack.log.tmp
2022-10-24 21:07:59,629 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Intel
2022-10-24 21:07:59,665 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: PerfLogs
2022-10-24 21:07:59,702 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: PerfLogs
2022-10-24 21:07:59,737 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Program Files
2022-10-24 21:07:59,771 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Program Files (x86)
2022-10-24 21:07:59,808 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: ProgramData
2022-10-24 21:07:59,845 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Python310
2022-10-24 21:07:59,882 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Recovery
2022-10-24 21:07:59,918 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Recycler
2022-10-24 21:07:59,957 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: System Volume Information
2022-10-24 21:07:59,994 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: System Volume Information
2022-10-24 21:08:00,032 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Users
2022-10-24 21:08:00,069 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Windows
2022-10-24 21:08:00,106 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Windows.old
2022-10-24 21:08:00,145 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: hiberfil.sys
2022-10-24 21:08:00,182 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: hiberfil.sys
2022-10-24 21:08:00,216 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: jdk1.8.0_333
2022-10-24 21:08:00,255 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: pagefile.sys
2022-10-24 21:08:00,293 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: pagefile.sys
2022-10-24 21:08:00,328 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: swapfile.sys
2022-10-24 21:08:00,364 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: swapfile.sys
drwxrwx---   - SYSTEM           SYSTEM                 4096 2022-10-08 11:20 /$Recycle.Bin
drwxrwx---   - Administrators   Administrators            0 2022-10-17 10:01 /$WinREAgent
2022-10-24 21:08:00,401 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Config.Msi
2022-10-24 21:08:00,440 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Config.Msi
2022-10-24 21:08:00,478 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: Config.Msi
drw-rw-rw-   -                                            0 1970-01-01 08:00 /Config.Msi
d-wx-wx--x   - SYSTEM           SYSTEM                 4096 2022-10-19 14:37 /Documents and Settings
2022-10-24 21:08:00,514 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: DumpStack.log.tmp
2022-10-24 21:08:00,551 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: DumpStack.log.tmp
2022-10-24 21:08:00,587 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: DumpStack.log.tmp
-rw-rw-rw-   1                                         8192 1970-01-01 08:00 /DumpStack.log.tmp
drwxrwx---   - Administrators   SYSTEM                    0 2022-10-24 20:50 /Intel
2022-10-24 21:08:00,623 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: PerfLogs
2022-10-24 21:08:00,658 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: PerfLogs
2022-10-24 21:08:00,695 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: PerfLogs
drw-rw-rw-   -                                            0 1970-01-01 08:00 /PerfLogs
drwxrwx---   - TrustedInstaller TrustedInstaller      12288 2022-10-24 17:24 /Program Files
drwxrwx---   - TrustedInstaller TrustedInstaller       8192 2022-10-24 19:46 /Program Files (x86)
drwxrwx---   - SYSTEM           SYSTEM                 8192 2022-10-24 19:46 /ProgramData
drwxrwx---   - Administrators   SYSTEM                 4096 2022-10-17 15:09 /Python310
drwxrwx---   - SYSTEM           SYSTEM                    0 2022-10-19 14:37 /Recovery
drwxrwx---   - SYSTEM           SYSTEM                    0 2022-10-09 03:01 /Recycler
2022-10-24 21:08:00,738 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: System Volume Information
2022-10-24 21:08:00,774 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: System Volume Information
2022-10-24 21:08:00,813 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: System Volume Information
drw-rw-rw-   -                                         4096 1970-01-01 08:00 /System Volume Information
drwxrwxr-x   - SYSTEM           SYSTEM                 4096 2022-10-19 14:37 /Users
drwxrwx---   - TrustedInstaller TrustedInstaller      16384 2022-10-19 14:42 /Windows
drwxrwx---   - SYSTEM           SYSTEM                 4096 2022-10-19 14:42 /Windows.old
2022-10-24 21:08:00,852 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: hiberfil.sys
2022-10-24 21:08:00,887 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: hiberfil.sys
2022-10-24 21:08:00,924 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: hiberfil.sys
-rw-rw-rw-   1                                   6807244800 1970-01-01 08:00 /hiberfil.sys
d---------   - HUAWEI           None                   4096 2022-10-24 16:54 /jdk1.8.0_333
2022-10-24 21:08:00,961 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: pagefile.sys
2022-10-24 21:08:00,998 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: pagefile.sys
2022-10-24 21:08:01,035 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: pagefile.sys
-rw-rw-rw-   1                                   4710393856 1970-01-01 08:00 /pagefile.sys
2022-10-24 21:08:01,072 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: swapfile.sys
2022-10-24 21:08:01,107 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: swapfile.sys
2022-10-24 21:08:01,145 WARN nativeio.NativeIO: NativeIO.getStat error (2): 系统找不到指定的文件。
 -- file path: swapfile.sys
-rw-rw-rw-   1                                     16777216 1970-01-01 08:00 /swapfile.sys

这里面的原因就可以理解了,找不到目录因为没有按教程开始hadoop

参考教程设置一遍 Hadoop2OnWindows - HADOOP2 - Apache Software Foundation

由于我设置了HADOOP_HOME及path

所以这个文件hadoop-env.cmd的修改就没有按教程来,而是这样

set HADOOP_PREFIX=%HADOOP_HOME%
set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop
set YARN_CONF_DIR=%HADOOP_CONF_DIR%

根据需要, 需要修改数据存储目录的,修改一下

core-site.xml

<configuration>
   <property>
        <name>hadoop.tmp.dir</name>
        <value>/D:/hadoop-3.3.1/data/tmp</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/D:/hadoop-3.3.1/data/name</value>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/D:/hadoop-3.3.1/data/dfsdata</value>
    </property>
</configuration>

mapred-site.xml

<configuration>

   <property>
     <name>mapreduce.job.user.name</name>
     <value>%USERNAME%</value>
   </property>

   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>

  <property>
    <name>yarn.apps.stagingDir</name>
    <value>/D:/hadoop-3.3.1/data/%USERNAME%/staging</value>
  </property>

  <property>
    <name>mapreduce.jobtracker.address</name>
    <value>local</value>
  </property>

</configuration>

yarn-site.xml

<configuration>
  <property>
    <name>yarn.server.resourcemanager.address</name>
    <value>0.0.0.0:8020</value>
  </property>

  <property>
    <name>yarn.server.resourcemanager.application.expiry.interval</name>
    <value>60000</value>
  </property>

  <property>
    <name>yarn.server.nodemanager.address</name>
    <value>0.0.0.0:45454</value>
  </property>

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>

  <property>
    <name>yarn.server.nodemanager.remote-app-log-dir</name>
    <value>/D:/hadoop-3.3.1/data/app-logs</value>
  </property>

  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/D:/hadoop-3.3.1/data/userlogs</value>
  </property>

  <property>
    <name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name>
    <value>0.0.0.0</value>
  </property>

  <property>
    <name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name>
    <value>0.0.0.0</value>
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>-1</value>
  </property>

  <property>
    <name>yarn.application.classpath</name>
    <value>%HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*</value>
  </property>
</configuration>

修改完成后, 初始化

命令行中运行 

%HADOOP_HOME%\etc\hadoop\hadoop-env.cmd

执行完成,没有任何输出

可以通过打印 echo %HADOOP_PREFIX% 检查是否配置正确

然后接着初始化

%HADOOP_PREFIX%\bin\hdfs namenode -format

运行成功没有报错, 此时数据目录之tmp目录应该有内容

 

运行命令 

%HADOOP_PREFIX%\sbin\start-dfs.cmd 启动hadoop

启动成功,验证

cd %HADOOP_PREFIX%

上传一个文件

hdfs dfs -put README.txt /

检查文件是否上传成功

hdfs dfs -ls /

文件上传成功, 表示可用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值