Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 488|回复: 0

hadoop解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries.问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-31 17:01:01 | 显示全部楼层 |阅读模式

     

    先看下自己的JAVA_HOME里面有没有空格目录,如果有的话,先把JAVA_HOME换个没空格的位置。

     

     

    在windows系统本地运行spark的wordcount程序,会出现一个异常,但不影响现有程序运行。

    总归是一个异常,老是爆红,看着心烦,下面是异常信息

    让我们源码追踪一下,看看到底是什么原因导致,点击第一行爆红的异常信息提示,就是(shell.java:355)

    看到我的截图提示,大概了解什么原因了。发现HADOOP_HOME_DIR为null,右边outline里面找到一个私有静态变量叫HADOOP_HOME_DIR,

    点击看看是如何赋值的,

    HADOOP_HOME_DIR他的初始化应该是调用了一个checkHadoopHome()的方法,找到这个方法的实现

    在checkHadoopHome()这个方法实现里面,真相已经大白于天下了,方法里面需要找到一些系统配置信息,而我们程序里或系统里没有给到。

     

    这就针对的解决就可以了。而且根据checkHadoopHome()这个方法的实现过程,我们可以得出两种解决这个问题的方法。

     

    两种方法的前提都是需要在本地解压hadoop的安装包的。

     

    我这里的解压的是hadoop-common-2.2.0-bin-master.zip。

     

    这里主要的还是需要在bin目录下找winutils.exe。

    第一种方法,

    我们看到源码292行,他是先从System.getProperty("hadoop.home.dir");这里获得信息,

    从他的注释信息看

     // first check the Dflag hadoop.home.dir with JVM scope

    首先检查的应该是java虚拟机里面的这个hadoop.home.dir,

    那我们就可以直接在程序开始执行出手动添加

    System.setProperty("hadoop.home.dir", "D:\\Programe\\hadoop-common-2.2.0-bin-master");

    注意:这段代码要加到程序的开头第一行

    运行程序,刚刚的异常爆红就不会出现了。

    第二种方法,

    从源码296行的System.getenv("HADOOP_HOME");,不难看出,如果在虚拟机里面没有找到hadoop.home.dir

    那就从这行代码获得,从注释信息来看

    // fall back to the system/user-global env variable

    那就是从系统的用户全局变量里面找HADOOP_HOME这个配置。

    那我们直接在Windows的系统变量里面配置HADOOP_HOME,然后在PATH里面配置HADOOP_HOME/bin

    这种方法需要重启计算机,运行程序,刚刚的异常爆红就不会出现了。

    至此,两种方法任选其一,都是可以解决问题的

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-4 14:11 , Processed in 0.061942 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表