为什么Hadoop无法创建目录?IntelliJ运行MapReduce WordCount报错
问题排查步骤与解决方案
核心问题定位
1. 依赖版本冲突
你当前的POM文件同时引入了跨大版本的Hadoop依赖:
- 已废弃的Hadoop 1.x版本组件
hadoop-core 1.2.1 - Hadoop 3.x版本组件
hadoop-client 3.3.1、hadoop-common 3.3.1
跨版本类实现不一致会直接触发运行时调用异常,是报错的核心诱因之一。
2. Windows本地运行Hadoop适配缺失
报错码-1073741701是Windows系统下运行Hadoop的典型异常:Hadoop默认基于Linux Shell实现目录创建、权限设置操作,Windows环境缺少对应版本的适配二进制文件时,即使手动设置了文件夹完全控制权限,RawLocalFileSystem的系统调用依然会失败。
解决方案
第一步:修复POM依赖
删除POM中如下废弃的hadoop-core依赖块:
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-core</artifactId> <version>1.2.1</version> </dependency>
仅保留3.3.1版本的hadoop-client和hadoop-common即可,hadoop-client已经包含了MapReduce运行所需的全部核心依赖,无需重复引入。
第二步:配置Windows Hadoop适配文件
- 下载和依赖版本一致的3.3.1版本Hadoop Windows适配包,解压到本地无中文、无空格的路径下,例如
D:\hadoop-3.3.1 - 配置系统环境变量:
- 新建
HADOOP_HOME变量,值为上述解压路径 - 将
%HADOOP_HOME%\bin添加到系统Path变量中
- 新建
- 将
%HADOOP_HOME%\bin目录下的hadoop.dll文件复制到C:\Windows\System32目录,避免运行时动态链接库调用缺失。
第三步:代码层适配本地调试(可选)
在WordCount主类的main方法最开头添加如下配置,关闭本地文件系统权限校验:
Configuration conf = new Configuration(); conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); conf.set("hadoop.security.authentication", "simple"); System.setProperty("HADOOP_USER_NAME", "root");
第四步:运行前检查
每次启动程序前确认你指定的输出目录不存在,MapReduce默认不允许覆盖已存在的输出目录,会直接触发运行失败。
内容的提问来源于stack exchange,提问作者Arpit Pachori
相关产品推荐
相关产品推荐

