Hadoop 3.3.6在Windows下遇UnsatisfiedLinkError,部分命令异常
解决Hadoop Windows下NativeIO$Windows.access0未解析的UnsatisfiedLinkError问题
问题核心
部分Hadoop FS命令报错,核心原因是Hadoop本地库版本与系统/Java环境不匹配,或者本地库加载优先级异常。hadoop fs -cat这类命令未触发权限校验逻辑,而hadoop fs -ls需要调用NativeIO的权限检查方法,因此出现部分功能正常的差异。
排查与修复步骤
- 确认本地库版本完全匹配:下载与你的Hadoop 3.3.6完全对应版本的winutils和hadoop.dll(注意区分32/64位,必须和系统一致),替换现有文件。
- 强制指定Hadoop本地库路径:在系统环境变量中添加
HADOOP_HOME,值为你的Hadoop安装根目录;再添加HADOOP_OPTS,值为-Djava.library.path=%HADOOP_HOME%\bin。 - 检查Java位数:确保Java 1.8.0_202是64位版本(和Hadoop、系统一致),32位Java无法加载64位本地库。
- 清理旧本地库缓存:删除C:\Windows\System32中的hadoop.dll,仅保留
%HADOOP_HOME%\bin下的对应版本,避免系统加载旧版本。 - 验证加载顺序:打开命令行执行
echo %PATH%,确保%HADOOP_HOME%\bin在Path列表的最前端,优先加载正确的本地库。 - 绑定Spark与Hadoop环境:在Spark配置文件
spark-env.cmd中添加set SPARK_DIST_CLASSPATH=%HADOOP_HOME%\etc\hadoop;%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\common\lib\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\hdfs\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\mapreduce\lib\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\yarn\lib\*,强制适配当前Hadoop版本。
验证修复
执行hadoop fs -ls /和hadoop fs -cat /test.txt(替换为你的实际文件路径),确认两个命令都能正常运行,无报错。
内容的提问来源于stack exchange,提问作者Colin Hicks
相关产品推荐
相关产品推荐

