Windows下Hadoop 3.4.0执行WordCount报posix:permissions不支持错误
问题场景
Hadoop 3.4.0搭配Java 8,Windows环境下集群的datanode、namenode、resourcemanager、nodemanager均正常运行,执行WordCount命令:
C:\hadoop\sbin>hadoop jar C:/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount /input /output_dir
触发如下错误:
Exception in thread "main" java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute
at sun.nio.fs.WindowsSecurityDescriptor.fromAttribute(WindowsSecurityDescriptor.java:358)
at sun.nio.fs.WindowsFileSystemProvider.createDirectory(WindowsFileSystemProvider.java:492)
at java.nio.file.Files.createDirectory(Files.java:674)
at java.nio.file.TempFileHelper.create(TempFileHelper.java:136)
at java.nio.file.TempFileHelper.createTempDirectory(TempFileHelper.java:173)
at java.nio.file.Files.createTempDirectory(Files.java:950)
at org.apache.hadoop.util.RunJar.run(RunJar.java:296)
at org.apache.hadoop.util.RunJar.main(RunJar.java:245)
解决方法
该错误源于Windows文件系统不支持POSIX权限属性,而Hadoop的RunJar模块在创建临时目录时尝试设置该属性。可通过以下步骤修复:
指定Hadoop专属临时目录
- 在Hadoop安装根目录下创建
tmp文件夹(如C:\hadoop\tmp),确保该文件夹拥有读写权限。 - 修改
C:\hadoop\etc\hadoop\core-site.xml,添加临时目录配置:<property> <name>hadoop.tmp.dir</name> <value>C:\hadoop\tmp</value> <description>临时文件存储根目录</description> </property> - 修改
C:\hadoop\etc\hadoop\hadoop-env.cmd,添加环境变量指定JVM临时目录:set HADOOP_TMP_DIR=C:\hadoop\tmp set HADOOP_OPTS=-Djava.io.tmpdir=C:\hadoop\tmp
- 在Hadoop安装根目录下创建
补全Windows原生依赖库
确认Hadoop的bin目录下存在winutils.exe和hadoop.dll文件(需对应Hadoop 3.4.0版本的Windows适配包),缺失则需下载放入bin目录,避免原生库缺失引发的权限类问题。重启Hadoop集群
执行命令重启所有服务:C:\hadoop\sbin>stop-all.cmd C:\hadoop\sbin>start-all.cmd之后重新执行WordCount命令即可。
内容的提问来源于stack exchange,提问作者Zumrud Isgandarli

