2010-10-30 44 views
2

我正在伪分布模式下运行hadoop,并使用hadoop streaming来执行我的map-reduce操作。但问题是我不断收到Streaming Job Failed错误消息。以下是日志:.NET中的Hadoop流式传输

标准错误日志

产生java.io.IOException:不能运行程序 “输入/ StdInOut.exe”:CreateProcess的错误= 2,系统找不到指定的文件
在java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:166)
at org.apache.hadoop.streaming.PipeMapper.configure (PipeMapper.java:63)
at sun.reflect.NativeMethodAcc essorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect中。 Method.invoke(Method.java:597)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java: 64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(Method.java:597)
在org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
在org.apache.hadoop.util.ReflectionUtils .setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apach e.hadoop.mapred.MapTask.runOldMapper(MapTask.java:354)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child。主(Child.java:170)
引起:产生java.io.IOException:CreateProcess的错误= 2,系统无法找到该文件在java.lang.ProcessImpl.create(本机方法)指定
在java.lang中.ProcessImpl(ProcessImpl.java:81)
在java.lang.ProcessImpl.start(ProcessImpl.java:30)
在java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 20更多

我知道它说产生java.io.IOException:不能运行程序“输入/ StdInOut.exe”:CreateProcess的错误= 2,系统找不到指定的文件但该文件是在本地为存在两个以及在同一条路径上的hdfs。

这是我自己的映射器的实现:

static void Main(string[] args) 
{ 
    string s; 
    while ((s = Console.ReadLine()) != null) 
    { 
    string[] words = s.Split(' '); 
    foreach (var word in words) 
    { 
     //Setting occurance of each word to 1 
     Console.WriteLine(word + "\t" + 1); 
    } 
    } 
} 

,我使用这个命令ssh来执行我的工作:

bin/hadoop jar contrib/streaming/hadoop-*-streaming.jar -input input/sample.txt -output output -mapper input/StdInOut.exe -reducer NONE 

任何解决方案?

+0

如果我使用-file输入/ StdInOut.exe,那么错误信息会变为: ** java.io.IOException:无法运行程序“C:\ tmp \ hadoop-AliAmjad \ mapred \ local \ taskTracker \ jobcache \ job_201010301748_0017 \ attempt_201010301748_0017_m_000000_0 \ work \。\ StdInOut.exe“:CreateProcess error = 216,此版本的%1与您正在运行的Windows版本不兼容。检查计算机的系统信息以查看是否需要x86(32位)或x64(64位)版本的程序,然后联系软件发行商**。 我试过我的程序的x86和x64版本,但没有运气... – Ali 2010-10-30 15:56:45

回答

2

错误实际上是映射器的相对路径。

+0

你有我的upvote。你会不会更关注一下映射器在哪里搜索文件? – 2013-06-21 06:39:57