1 错误描述

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

2 原因分析

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

\tmp\hadoop\mapred\staging\Administrator1872014343\.staging\job_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或以上级别即可。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="CONSOLE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss}  %highlight(%-5level) ${PID:- }--%magenta([%15.15(%thread)]) %cyan(%-50.50(%logger{50})) : %msg %n"/>
    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="CONSOLE_APPENDER"/>
    </root>
</configuration>
                    文章目录1 错误描述2 原因分析3 解决方案1 错误描述本机windows系统,hadoop3.2.2版本。在运行MapReduce任务的时候报“org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件”错误,但是该错误不影响MR任务的执行结果。2 原因分析直接根据log信息,发现抛出异常的位置在RawLocalFileSystem类的mkOneDirWithMode方法中。且这里可以看到异常信息与控制台的异常信息相符。p2
				
今天在使用Hadoop集群上的Hive,结果出现了以下的情况。 hive (default)> show databases; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 通过控制台的异常信息我们可以知道Hive的metadata服务未开启导致的。 解决方案:
遇到一个在Windows Server2012 R2系统,IIS服务器启动问题,无论如何尝试启动IIS,始终提示“当文件存在无法创建文件”,一个令人懵比的问题,文件存在,哪里存在了?不知道,就只能够盲人摸象,一步步排查,开始填坑,此处以Win10作为问题复现环境 系统中安装好IIS,在未做任何修改之前,IIS能够正常启动和访问,因为个人需要对C:\Windows\Sy...
删Visual Studio没删除干净 用Evrything搜索Visual Studio删除残余文件,应该是动了系统文件,误删了系统文件,导致每次开机弹窗,影响系统自启目录 启动目录:Win+r输入shell:startup 该文件夹的程序会在开机的候自启。 但是,由于我的系统出现问题,阻断了自启。 每次点击确定之后,系统启动文件夹里面的的程序才会缓慢的自启,强迫症很难受,折腾好久找到解决方案。 错误信息和Win32Bridge.Server.exe有关 在访问WindowsApp
FileExistsError: [WinError 183] 当文件存在,无法创建文件。 FileExistsError: [WinError 183] 当文件存在,无法创建文件文件重命名的候我们可能会碰到这样的问题 那么我们应该怎么解决呢? 下面是我的文件 首先ctrl+A全选图片,然后重命名全部命名为0 然后代码就可以成功运行了: 最后得到图像结果: 顺便分享一下代码: import os class ImageRename(): def __init__
今天我在idea中运行自定义outputformate类的候遇到的问题org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z, 之前的wordcountdemo是自己打成jar包放到hadoop集群中运行,没有任何问题,就是很麻烦 所以尝试使用window本地去调试结果,结果就报了错误。我用的是window10系统,hadoop-3.1.3 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test; import java.io.IOException; import
解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z和Error: JAVA_HOME is incorrectly set. Please update D:\Software\hadoop260\conf\hadoop-env.cmd ‘-Xmx512m’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 这个错误目前我知道的有以下几种解决办法: 一、查看hadoop安装是