栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

解决Windows环境下“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误

解决Windows环境下“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误

文章目录
  • 1 错误描述
  • 2 原因分析
  • 3 解决方案

1 错误描述

本机windows系统,hadoop3.2.2版本。在运行MapReduce任务的时候报“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误,但是该错误不影响MR任务的执行结果。

2 原因分析

直接根据log信息,发现抛出异常的位置在RawLocalFileSystem类的mkOneDirWithMode方法中。且这里可以看到异常信息与控制台的异常信息相符。
p2d参数的值为:

tmphadoopmapredstagingAdministrator1872014343.stagingjob_local1872014343_0001


这里try-catch的捕获异常的代码块只有一行关键代码,那就是:

NativeIO.Windows.createDirectoryWithMode(p2f, permission.toShort());

查看该方法的实现,发现最终是一个native方法。根据注释可以知道,该方法是创建一个目录,但是如果目录已经存在,那么将会抛出IOException。这就是异常的由来。

对方法调用进行溯源,可以发现在本地提交MR任务的JobSummitter中,创建MR工作工空间以及拷贝MR任务配置文件、创建output文件等都调用了该native方法。

3 解决方案

在异常处理代码中,有一个判断LOG的日志级别的条件,那就是如果日志级别是debug,那么就会打印这个日志。这里就是入手点。

项目的日志框架排除了log4j,采用logback(logback日志级别默认为debug)。只需要将在logback.xml日志文件中将日志的level设置为info或以上级别即可。



    
    
        
            UTF-8
            ${CONSOLE_LOG_PATTERN}
        
    
    
        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/688407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号