如何消除Error util.Shell:找不到winutils二进制文件

时间:2014-09-23 19:53:01

标签: hadoop yarn hadoop2

我正在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 null\bin\winutils.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)

你知道怎么做这个例外而不是hapenning吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

您可以注释掉以下行,以删除错误     抛出新的IOException(&#34;找不到可执行文件&#34; + fullExeName +&#34;在Hadoop二进制文件中。&#34;);

对于Windows检查,
    Error while running Mapreduce(yarn)from windows eclipse

答案 2 :(得分:-1)

我在某个地方看到了一个建议,只是创建一个具有该名称的空文件,以摆脱错误。我想我尝试了一次并且它有效 - 如果它适合你,请随时尝试。如果需要,可以即时创建文件。