【大数据入门踩坑系列】hadoop提交job作业报错xx.NativeIO$POSIX.stat(Ljava/lang/String)以及yarn提交抛出Exit code: 127的问题解决办法

1. 文章主要内容

       此篇博客为[大数据入门踩坑系列]的首篇博客,该系列主要记录在大数据入门学习过程中遇到问题的分析思路和解决办法,欢迎大家互相交流。
       本篇博客主要涉及两个主体内容。第一个:解决windows本地提交mapreduce作业,程序抛org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat(Ljava/lang/String;)的问题。第二个:在服务器端提交yarn作业,抛出抛出Exit code: 127的解决办法。(通读本篇博客大概需要5分钟左右的时间)。

2. windows本地提交mapreduce作业,程序抛出org.apache.hadoop.io.nativeio.NativeIO$POSIX

2.1 场景一:windows本地提交input输入为文件夹

       首先博主之前在windows配置了hadoop的环境,且运行了一些hadoop的mapreduce程序,都是正常的。在一次input输入为文件夹的时候,报了如标题一样的错误。当时的思考就是,我之前的程序是可以运行正常的,但仅仅是input路径从文件换成了文件夹就抛出了org.apache.hadoop.io.nativeIO$POSIX错误,此时的思路没有定在环境的问题,而是为什么输入input从文件换成文件夹就报错了呢?(相关的代码和文件路径如下图所示)
在这里插入图片描述
       input为文件夹的时候,就会抛出标题的错误,通过网上的搜索得出了解决的办法,只需要在路径最后添加*即可,如下图所示:
在这里插入图片描述

2.2 场景二:windows本地提交input输入为文件夹

       继续在本地windows上开发hadoop程序,这次的作业程序需要在本地加载一个小表的数据,如下图代码所示:
在这里插入图片描述
       提交作业后,依然报和标题一样的错误,此时文件的路径是指到了文件内容,按理说不会存在问题,在网上搜索了相关答案后,不得不思考是hadoop开发环境和本地windows配置的hadoop环境的版本不一致的问题。于是查看了hadoop的本地版本号,如下所示:
在这里插入图片描述
在这里插入图片描述

       可以发现本地windows安装的hadoop版本号为hadoop 3.3.2,和maven配置开发环境的hadoop版本号一致。要提前说明的一点,首先我的hadoop程序大部分都是可以运行的,之前在捣鼓windows的hadoop安装时,配置的winutils.exe和hadoop.dll版本号是hadoop 3.0.0的,在开发的过程中没有遇到问题,所以自以为是可以匹配当前版本的hadoop 3.3.2。直到遇到了本博客的错误,才发现是版本不兼容,导致有些方法不能调用或者不匹配的问题。至于如何在windows下安装hadoop的环境,请自行网上搜索教程。
       定位到问题的关键,于是去寻找匹配版本的winutils.exe和hadoop.dll,进入链接hadoop版本的winutils和hadoop.dll,发现最高的版本是hadoop 3.2.2版本的,此时想至少比之前的hadoop 3.0.0版本要高,于是将hadoop 3.2.2中的winutils.exe和hadoop.dll复制到我本地hadoop 3.3.2的bin文件夹中(需要注意的是,本地的hadoop 3.3.2的源码文件夹是需要自行下载的,网上都有相关的教程),如下图所示:
在这里插入图片描述
在这里插入图片描述
       之后便重新进行了提交作业的尝试,发现依然报此类作业,就在我以为是版本不匹配问题的时候,突然在网上寻找到一篇博客中的一段小细节文字,就是之后还需要将更换好的hadoop.dll拷贝到C:/Windows/System32下即可(如果此文件内容存在,替换即可)。之后再次提交相同的作业,运行正常没有问题。

       解决了此问题之后,我在思考,正是因为版本不匹配,相关的方法就会不匹配、不支持,从而抛出异常,那么我们回到场景一路径是文件夹的问题,此时我去掉了*号,再次提交作业,运行正常,这也证明了场景一的解决方法是暂时,治标不治本的方法,也说明了版本不匹配会抛出一些方法异常、不支持的错误信息。

3. yarn提交作业抛出抛出Exit code: 127错误

       这是在Linux上通过yarn命令提交jar包作业到yarn服务器上,运行时控制台所报的错误信息,这个错误的解决方法比较简单,网上搜索就可以得到办法,我们进入到yarn-env.sh文件中(yarn-env.sh文件在hadoop根目录下的/etc/hadoop下),然后在文件中加入Java的安装路径(注意:每个人的JAVA_HOME不相同,按照自己的来),如下图所示:
在这里插入图片描述

4. 本篇小结

       本篇博客主要记录了在大数据实验hadoop过程中的相关错误解决办法,给出自己的分析思路过程,如有问题,希望大家能够评论区互相交流!。

猜你喜欢

转载自blog.csdn.net/qq_32575047/article/details/128713426
今日推荐