运行Hadoop自带wordcount示例出现CreateSymbolicLink错误183如何解决
报错原因
核心报错CreateSymbolicLink error (183): Cannot create a file when that file already exists的触发原因分为三类,优先级从高到低排列:
- 输出路径冲突:MapReduce任务的强制规则是运行前输出路径必须不存在,你提交命令中指定的
/output.txt如果已经在HDFS上存在(不管是普通文件还是目录),都会导致任务创建输出目录时冲突失败 - Windows权限不足:从报错中的主机名可以判断你在Windows环境下运行Hadoop,当前启动Hadoop服务的用户如果没有创建符号链接的系统权限,也会触发该类报错
- 临时文件残留:NodeManager本地工作目录存在之前任务异常退出留下的残留文件,本次任务启动时创建符号链接和已有文件冲突
排查解决步骤
- 优先处理输出路径冲突:执行命令
hdfs dfs -rm -r /output.txt删除已存在的目标输出路径,删除完成后重新提交任务即可解决绝大多数同类问题 - 权限问题修复:如果删除路径后仍报错,打开Windows本地安全策略(运行
secpol.msc),依次进入「本地策略 > 用户权限分配 > 创建符号链接」,将当前运行Hadoop的用户添加到权限列表中,重启电脑后生效 - 残留文件清理:上述操作都无效的话,先停止Hadoop全集群服务,删除
core-site.xml中hadoop.tmp.dir配置项指定的临时目录下所有内容,重新格式化HDFS后再启动集群提交任务 - 补充建议:wordcount的输出路径是目录而非单个文件,建议将输出路径命名为
/output这类目录风格的名称,避免和普通文件混淆导致误操作
内容的提问来源于stack exchange,提问作者aero1313
相关产品推荐
相关产品推荐

