当前位置:   article > 正文

解决报错:Failed to locate the winutils binary in the hadoop binary path

failed to locate the winutils binary in the hadoop binary path

项目要使用spark查询ElasticSearch中的数据。在使用spark时(创建spark context)出现这样一个错误:
Spark开发报错

报错信息:

ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

出现问题原因:

Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
无法定位可执行文件winutil。在使用spark开发时用到了hadoop工具,而Hadoop运行在Linux下。所以需要使用winutils插件

以下是我的解决方法:

1、下载Hadoop二进制文件。这里以2.8.3版本为例:

Hadoop下载页面 : https://hadoop.apache.org/releases.html
下载后,将其解压。需要注意的是:路径中不允许包含空格、中文符号、制表符等文字符号。

版本需要与 winutils 仓库(https://github.com/steveloughran/winutils)中所支持的版本对应,所以不要追逐最新版本~
如果需要选择其他版本,以下页面可供参考:https://www.apache.org/dyn/closer.cgi/hadoop/common

2、下载winutils

访问 winutils 的 github仓库:https://github.com/steveloughran/winutils
选择下载文件(Clone or download -> Download ZIP)
或者直接本地 git clone https://github.com/steveloughran/winutils.git
选择对应的版本文件夹,拖动合并文件夹。

我的版本是2.8.3,我会将仓库中的hadoop-2.8.3文件夹和本地的hadoop-2.8.3文件夹合并。如有冲突的重名文件,需要保留winutils文件夹中文件。

3、修改配置本地Hadoop环境

修改Hadoop配置文件,搭建本地Hadoop环境:

(1) 配置hdfs的默认端口: 修改 Hadoop2.8.3/etc/hadoop/core-site.xml ,加入

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>    
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(2) 修改namenode、datanode数据路径以及数据备份副本数:修改 Hadoop2.8.3/etc/hadoop/hdfs-site.xml ,加入

注:
默认windows本地运行,所以这里设置副本数为1

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>    
        <name>dfs.namenode.name.dir</name>    
        <value>file:/hadoop/data/dfs/namenode</value>    
    </property>    
    <property>    
        <name>dfs.datanode.data.dir</name>    
        <value>file:/hadoop/data/dfs/datanode</value>  
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(3) 修改资源调配框架相关配置,我们只需要设置MapReduce使用的框架就成,修改 Hadoop2.8.3/etc/hadoop/mapred-site.xml,加入

注:
1.如果已存在mapred-site.xml,直接修改;如不存在,复制mapred-site.xml.template为mapred-site.xml即可
2.我这里设置 yarn,有别的需求请自行修改

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(4) 由于(3)中设置yarn为资源管理器,所以需要配置yarn,修改Hadoop2.8.3/etc/hadoop/yarn-site.xml,加入

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(5) Hadoop-2.8.3/etc/hadoop-env.cmd修改(可使用sublime打开):

设置JDK路径,路径不可以有空格

修改JAVA_HOME:
set JAVA_HOME=D:\Env\Java\jdk1.8.0_221

(6) 进入Hadoop-2.8.3\bin目录,格式化hdfs:
打开Windows Powershell(或者cmd),

cd Hadoop-2.8.3\bin
.\hdfs.cmd namenode -format
  • 1
  • 2

(7)进入Hadoop-2.8.3\sbin目录,修改Hadoop启动脚本start-all.cmd(可使用sublime打开):
在第一行加入一句“cd Hadoop-2.8.3\bin

(8)启动Hadoop集群:
进入Hadoop-2.8.3\sbin目录,执行.\start-all.cmd
运行集群时,请不要关闭弹出的cmd

结果验证:
打开http://localhost:8088查看集群状态
打开http://localhost:50070可以查看到hadoop运行状态,包括hdfs等信息。
测试结束后,可以执行.\end-all.cmd关闭hadoop集群。

4、修改系统环境变量

为解决IDE中报错问题,还需要添加系统环境变量:
编辑系统变量,如已添加,请自行确定是否需要修改或添加:

变量名变量值
JAVA_HOMED:\Env\Java\jdk1.8.0_221
HADOOP_HOMED:\Env\Hadoop\hadoop-2.8.3
CLASSPATHD:\Env\Hadoop\hadoop-2.8.3\bin\winutils.exe
PATH向PATH后追加%JAVA_HOME/bin% %HADOOP_HOME/bin%

重新启动Windows。

结果验证:
Windows powershell hadoop version命令有效,显示hadoop版本2.8.3。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/686120
推荐阅读
相关标签
  

闽ICP备14008679号