【问题标题】:Hadoop Streaming in .NET.NET 中的 Hadoop 流式处理
【发布时间】:2010-10-30 14:15:41
【问题描述】:

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

标准错误日志

java.io.IOException: Cannot run program "input/StdInOut.exe": CreateProcess error=2, 系统找不到指定的文件
在 java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
在 org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:166)
在 org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:63)
在 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)
在 org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
在 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)
在 org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
在 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:354)
在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
在 org.apache.hadoop.mapred.Child.main(Child.java:170)
原因:java.io.IOException: CreateProcess error=2, 系统找不到指定的文件 在 java.lang.ProcessImpl.create(Native Method)
在 java.lang.ProcessImpl.(ProcessImpl.java:81)
在 java.lang.ProcessImpl.start(ProcessImpl.java:30)
在 java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 20 多个

我知道它说 java.io.IOException: Cannot run program "input/StdInOut.exe": CreateProcess error=2, The system cannot find the file specified 但该文件同时存在本地以及同一路径上的 hdfs。

下面是我自己的mapper的实现:

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

有什么解决办法吗?

【问题讨论】:

  • 如果我使用 -file input/StdInOut.exe 则错误消息更改为:java.io.IOException: Cannot run program "C:\tmp\hadoop-AliAmjad\mapred\ local\taskTracker\jobcache\job_201010301748_0017\attempt_201010301748_0017_m_000000_0\work\.\StdInOut.exe": CreateProcess 错误=216,此版本的 %1 与您正在运行的 Windows 版本不兼容。检查您计算机的系统信息,看看您是否需要 x86(32 位)或 x64(64 位)版本的程序,然后联系软件发行商。我尝试了我的程序的 x86 和 x64 版本,但没有运气......

标签: c# .net hadoop


【解决方案1】:

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

【讨论】:

  • 你有我的支持。您愿意详细说明一下映射器在哪里搜索文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多