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

项目要使用spark查询ElasticSearch中的数据。在使用spark时(创建spark context)出现这样一个错误:
解决报错:Failed to locate the winutils binary in the hadoop binary path_第1张图片

报错信息:

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 ,加入


    
        fs.defaultFS
        hdfs://localhost:9000
        

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

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


    
        dfs.replication
        1
    
        
        dfs.namenode.name.dir    
        file:/hadoop/data/dfs/namenode    
        
        
        dfs.datanode.data.dir    
        file:/hadoop/data/dfs/datanode  
    

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

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


    
        mapreduce.framework.name
        yarn
    

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


    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
        yarn.nodemanager.aux-services.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler
    

(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_HOME D:\Env\Java\jdk1.8.0_221
HADOOP_HOME D:\Env\Hadoop\hadoop-2.8.3
CLASSPATH D:\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。

你可能感兴趣的:(大数据研发笔记,#日常记录)