java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray

 java客户端连接HDFS报错:

Exceptionin thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V

 在网上查找原因后,发现这是由于hadoop.dll 版本问题引起的。

 需要选择正确的版本,查询hadoop版本,如hadoop-2.6.0,那么需要下载相同版本的hadoop.dll,或者版本稍高。

将下载hadoop.dll放到HADOOP_HOME的bin目录下,同时copy到windows系统的c:/window/system32/下。

测试后,正常。

 

附:

hadoop.dll下载地址:

hadoop-2.6.0:https://github.com/sdravida/hadoop2.6_Win_x64/blob/master/bin/hadoop.dll

其他版本:https://github.com/steveloughran/winutils

 

 

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:645) at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1230) at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:160) at org.apache.hadoop.util.DiskChecker.checkDirInternal(DiskChecker.java:100) at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:77) at org.apache.hadoop.util.BasicDiskValidator.checkStatus(BasicDiskValidator.java:32) at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.confChanged(LocalDirAllocator.java:331) at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:394) at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:165) at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146) at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:130) at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:123) at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:172) at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:794) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:251) at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1570) at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1567) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) at org.apache.hadoop.mapreduce.Job.submit(Job.java:1567) at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1588) at edu.imu.mapreduce.WordCount.run(WordCount.java:62) at edu.imu.m
最新发布
07-03
该异常 `java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0` 通常出现在 Windows 系统上运行 Hadoop 相关程序时,由于缺少必要的本地库文件(如 `winutils.exe` 和 `hadoop.dll`)导致的本地链接错误。为了解决这个问题,可以采取以下措施: 1. **下载 `winutils.exe`** 需要从 GitHub 上获取适用于 Hadoop 的 `winutils.exe` 文件,例如可以通过 [steveloughran/winutils](https://github.com/steveloughran/winutils) 获取最新版本的工具集。确保选择的版本与当前使用的 Hadoop 版本兼容。 2. **配置环境变量** 将 `winutils.exe` 放置在一个合适的目录中,比如 `C:\hadoop\bin`,并设置系统环境变量 `HADOOP_HOME` 指向该目录。此外,将 `C:\hadoop\bin` 添加到系统的 `Path` 环境变量中,以便操作系统能够找到并执行这些工具文件[^3]。 3. **放置 `hadoop.dll` 文件** 将 `winutils` 包含的 `hadoop.dll` 文件复制到系统目录 `C:\Windows\System32` 中,这样 Java 虚拟机在运行时可以直接访问到这个 DLL 文件,从而避免链接错误。 4. **验证配置** 打开命令行窗口并输入 `echo %HADOOP_HOME%` 来确认环境变量是否正确设置,并且测试运行 Hadoop 应用程序以检查问题是否已解决。 5. **使用依赖管理工具** 如果项目使用 Maven 或 Gradle 等依赖管理工具,则需要确保构建脚本中包含正确的 Hadoop 依赖项,并且版本一致。这有助于减少因依赖版本不匹配而导致的问题。 6. **JVM 参数设置** 在某些情况下,可能还需要通过 JVM 启动参数 `-Djava.library.path` 明确指定本地库路径,例如: ```shell -Djava.library.path=C:\hadoop\bin ``` 7. **重新启动开发环境** 修改环境变量后,有时需要重启 IDE 或其他开发环境才能使更改生效。 8. **检查权限问题** 确保所有相关文件和目录都具有适当的读取和执行权限,特别是在多用户环境中。 9. **日志分析** 查看完整的异常堆栈跟踪,确定具体是哪个本地方法调用失败,这可以帮助定位问题根源。 10. **更新操作系统和驱动程序** 确认操作系统以及相关的硬件驱动程序都是最新的,有时候旧版驱动可能会导致兼容性问题。 通过以上步骤,应该能够有效解决由本地库缺失或配置不当引起的 `UnsatisfiedLinkError` 异常问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值