1、问题描述
spark集成hadoop以后,利用spark读取hdfs文件报错,具体报错信息如下所示:
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.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:318)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:333)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:326)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
2、问题分析
根据错误提示信息我们可以得知:在hadoop的binary包中没有定位到winutils binary,所以在加载winutils文件过程中出现IO异常。这是因为在集成spark的时候winutilf以及hdfs.dll两个包不兼容导致的,所以我们只需要更换这两个包,保证其兼容性即可;
3、处理方法
- 检查开发环境中$HADOOP_HOME中是否有winutils(如果开发环境中没有hadoop安装包,请先下载对应的hadoop安装包,然后解压到自己指定的路径即可);
- 下载对应版本的winutils以及hdfs.dll;下载地址为:https://download.csdn.net/download/m0_38003171/10850645,里面包含了2.6到3.0的版本,选择和自己hadoop对应的版本或者相近的版本即可;
- 下载完之后,进行解压,把解压之后的winutils以及hdfs.dll复制到hadoop安装目录下面的bin目录下面,
- 重启你的windows计算机及重新执行程序即可