Hadoop JAVA API学习笔记:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)报错

前提

Hadoop的windows依赖文件,介绍,相关知识

  •  winutils.exe
  • winutils.pdb
  • hadoop.dll

 hadoop.dll

介绍

  • hadoop.dll是 Hadoop 在 Windows 环境下的一个动态链接库文件。它是 Windows 操作系统中可执行文件(如.exe 文件)在运行时可以调用的共享代码库。这个文件通常与 Hadoop 的其他组件一起提供,是 Hadoop 为了在 Windows 系统中能够更好地利用系统资源、进行高效通信和执行特定功能而存在的。

作用

  • 支持 Hadoop 程序与 Windows 系统交互
    • 当 Hadoop 相关的程序(如 Hadoop 命令行工具或基于 Hadoop API 开发的应用程序)在 Windows 环境下运行时,hadoop.dll可以作为一个中间层,帮助这些程序与 Windows 操作系统的底层功能进行交互。例如,它可以帮助处理文件系统操作相关的系统调用。Hadoop 在 Windows 上可能需要与本地文件系统交互,hadoop.dll可以协助完成诸如文件读取、写入等操作,确保 Hadoop 程序能够正确地访问和处理本地文件路径。
  • 实现网络通信功能
    • 在分布式计算环境中,Hadoop 需要进行大量的网络通信。hadoop.dll可能包含了一些网络通信协议相关的代码,帮助 Hadoop 组件之间(如 HDFS 的 DataNode 和 NameNode 之间,或者 YARN 的 NodeManager 和 ResourceManager 之间)在 Windows 环境下进行高效的数据传输和信息交互。它可以处理诸如 TCP/IP 协议相关的操作,包括建立连接、发送和接收数据等,从而保障 Hadoop 集群各节点之间的通信顺畅。
  • 辅助资源管理和调度(与 YARN 相关)
    • 对于 YARN(资源管理和调度框架)在 Windows 环境下的运行,hadoop.dll可能也起到一定的作用。它可以帮助 YARN 更好地管理和分配系统资源,如 CPU 和内存。当应用程序在 YARN 上提交作业请求资源时,hadoop.dll可以协助 YARN 与 Windows 操作系统进行沟通,以获取准确的系统资源信息,并根据配置的策略进行合理的资源分配,确保作业能够高效地运行        

    WinUtils.exe(对于旧版本 Hadoop 可能需要)                        

 介绍

  • 这是一个用于 Windows 环境的工具,主要用于弥补 Hadoop 在 Windows 环境下一些功能缺失的问题。例如,在旧版本的 Hadoop 中,某些操作(如格式化 HDFS)在 Windows 环境下可能无法正常进行,需要 WinUtils.exe 来辅助完成。

作用

  • 帮助 Hadoop 在 Windows 环境下更好地执行一些与文件系统管理和服务启动相关的操作。例如,正确地设置 Hadoop 的临时目录等操作可能需要 WinUtils.exe 的支持。不过在较新的 Hadoop 版本中,对 Windows 环境的支持越来越好,对这个工具的依赖可能会逐渐减少。

winutils.pdb

  • 介绍

    • winutils.pdb是程序数据库(Program Database,PDB)文件。在软件开发中,PDB 文件主要用于调试。当 Hadoop 相关程序在 Windows 环境下构建和调试时,会生成winutils.pdb文件。它包含了调试信息,例如变量定义、函数入口点和代码行号等内容与winutils.exe相对应。
  • 作用

    • 调试支持
      • 当开发人员想要调试winutils.exe相关的功能时,winutils.pdb就发挥作用了。例如,如果winutils.exe在执行诸如格式化 HDFS 等操作出现异常,开发人员可以使用调试工具(如 Visual Studio 等专业调试工具)加载winutils.pdb文件。调试工具可以利用文件中的信息准确地定位到出现问题的代码行,帮助分析变量的值是否正确、函数调用是否符合预期等。这样可以更高效地找出程序中的错误,如内存泄漏、指针错误或者逻辑错误等,从而改进和优化winutils.exe的功能。
    • 符号解析
      • 在程序运行过程中,符号(如函数名、变量名)对于理解程序的行为是很关键的。winutils.pdb可以帮助解析winutils.exe中的这些符号。这在跟踪复杂的程序执行路径时非常有用,比如在研究winutils.exe如何与 Hadoop 的其他组件(如 HDFS 或 YARN)进行交互时,通过解析符号可以清楚地看到哪些函数被调用、以何种顺序调用,以及在调用过程中传递了哪些参数等信息。

这三个文件的报错参考:

hadoop.dll防止报nativeio异常等(IO流异常)

winutiles.exe没有的会报空指针异常等

一般情况下如果IDEA中没有配置日志文件,在最终报错结果中只能看到找不到该文件或目录,建议在IDEA中还是配置好日志文件方便查找错误

报错语句

出错:

org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)

解决方法

在hadoop作业利用IDEA的JAVA API操作进行数据去重时,总是报错找不到该文件或目录,以下为总结的其他人的方法

  • 检查hadoop和jdk的环境变量是否配置成功
  • cmd打开命令提示符,分别输入hadoop version和java -version,如果出现hadoop和java的版本号及表示环境变量配置成功,如果没有,接下来分别介绍hadoop和java的环境变量的配置
  • hadoop环境变量配置链接:hadoop的环境变量配置-CSDN博客
  • java环境变量配置链接:Java 开发环境配置 | 菜鸟教程

2.如果不是1的问题,则检查hadoop的windows环境依赖是否已经配置

  • 检查winutils.exe,hadoop.dll(尤其是这个,一定要检查版本号),winutils.pdb这三个依赖文件是否下载并存放在hadoop安装目录的bin目录中,如果没有,则下载并将其存放到hadoop安装目录的bin目录中
  • 重启电脑让环境依赖文件生效,首先将相关虚拟机全部挂起,然后重启电脑让这些依赖文件生效,继续启动状态为挂起状态的虚拟机,即可使环境依赖文件生效
  • 各版本hadoop的windows依赖文件下载github链接:

       github连接:       GitHub - cdarlint/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows

3.如果不是1、2的问题,则可能是hadoop.dll版本过老,不能支持多文件操作

  • 问题回顾:本人之前所用IDEA为2022年版本,虚拟机下载的hadoop-3.3.0,使用的依赖文件也是3.3.0版本,后来换了2024版本的IDEA,我是将之前2022版本IDEA的java project项目文件直接导入到了2024IDEA,再次运行就出现了以下问题,具体错误为No such file or directory,才开始我以为是本地文件目录没有创建或文件输入路径填写错误,后来发现不是这个问题,经查看log日志文件才看见具体问题为IO流错误,猜测是否为该依赖文件版本不支持IO流操作问题,我原来的输入路径为本地D盘文件夹testFile目录下input目录下的data1.txt和data2.txt文件,将这两个文件合并去重,发现报错无法找到该文件,但是将这两个txt文件转移到D盘根目录中再次运行不再报错,则考虑为此时的程序无法对多个文件目录进行操做
  • 此时对这个进行检测,将文件输入目录中的两个txt文件直接存放到电脑磁盘中,然后修改源代码文件导入路径,重新运行代码看程序是否执行成功,如果执行成功,则说明时hadoop.dll版本过老的问题
  • 解决办法:下载较新版本的hadoop.dll重复2操作,这里我在原来hadoop版本为3.3.0版本的基础上下载了3.3.1版本的hadoop.dll文件,下载后重复步骤2操作,即可运行成功

4.这个方式我没有试过,即修改hadoop io jar包的源代码,具体可看其他作者的

org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z的解决办法-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值