解决报错: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>

(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>

(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>

(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>

(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

(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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值