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