如何消除错误util.外壳程序:找不到winutils二进制文件



我在eclipse下从windows机器(客户端)执行远程作业,我澄清我的windows客户端上没有安装任何hadoop,我不需要,我正在远程执行hadoop作业,hadoop安装在linux机器上。一切都执行正确,但我想摆脱这个错误:

14/09/22 11:49:49 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable nullbinwinutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:355)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:370)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:363)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(Unknown Source)
at sun.reflect.ReflectionFactory.newFieldAccessor(Unknown Source)
at java.lang.reflect.Field.acquireFieldAccessor(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at MyFirstJob.main(MyFirstJob.java:45)

你知道如何使这个例外不发生吗?

安装winutils.exe,没有其他方法可以修复此错误。

这里有一个小上下文:Hadoop将在上传到集群之前在本地写入一些文件(例如作业配置)。因此,它需要设置权限、写入一些文件或创建目录。

如果它找不到二进制文件,它无论如何都会回退到Java实现,所以您不必担心。然而,没有内置的配置可以关闭此消息,因此真正修复它的唯一方法是重新编译hadoop-common jar而不出现此错误(我想安装winutils与之相比并没有那么糟糕)。

将org.apache.hadoop.util.Shell.java复制到您的项目中。

您可以注释掉下面的行,以删除错误
throw new IOException("在Hadoop二进制文件中找不到可执行文件"+fullExeName+"。");

同样对于Windows检查,
从windows eclipse 运行Mapreduce(yarn)时出错

我在某个地方看到了一个建议,只创建一个同名的空文件来消除错误。我想我试过一次,效果很好——如果对你有效,请随意尝试。如果需要,可以动态创建该文件。

最新更新