2013-10-07 114 views
0

我正在Cygwin環境的Win 7筆記本上運行Chuck Lam中'Hadoop in Action'中給出的Hadoop示例應用程序。 Python安裝在Cygwin和示例python應用程序運行。當我運行hadoop流應用程序時,它拋出以下錯誤。以下是命令在Hadoop-Streaming應用程序中運行Python腳本時出錯

"bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -D mapred.reduce.tasks=1 -input input/cite75_99.txt -output output -mapper 'RandomSample.py 10' -file RandomSample.py 

RandomSample.py是過濾輸入的簡單應用程序。

以下錯誤被拋出:

java.io.IOException: Cannot run program "C:\cygwin64\home\RajS1\hadoop-1.2.1\.\RandomSample.py": CreateProcess error=193, %1 is not a valid Win32 application 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) 
     at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:214) 
     at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     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) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     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.MapTask.runOldMapper(MapTask.java:426) 
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366) 
     at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:724) 
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application 
     at java.lang.ProcessImpl.create(Native Method) 
     at java.lang.ProcessImpl.<init>(ProcessImpl.java:376) 
     at java.lang.ProcessImpl.start(ProcessImpl.java:136) 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) 

當我運行以下命令,然後同時它拋出類似的錯誤。我的猜測流應用程序應該執行python應用程序,但它試圖執行這個java應用程序 請建議解決方案。在此先感謝

+0

「Python是安裝在Cygwin」 - 也許你需要直接安裝在窗戶蟒蛇。 –

+0

當我用Unix命令運行Python腳本時,它運行正常。看起來Hadoop- streaming API不能運行/執行Python腳本,因爲它認爲它是Java程序 – Shailesh

回答

2

你可能想嘗試這個選項以及

斌/ Hadoop的罐子的contrib /流/ Hadoop的流-1.2.1.jar -D mapred.reduce.tasks = 1 - 輸入輸入/ cite75_99.txt -output output -mapper'python RandomSample.py 10'-file RandomSample.py

如果你試試這個,你可能不會得到這個錯誤。但是你可能會拒絕訪問'python RandomSample.py',試着給出python exe的完整路徑。 像

倉/ hadoop的罐子的contrib /流/ Hadoop的流-1.2.1.jar -D mapred.reduce.tasks = 1 - 輸入輸入/ cite75_99.txt -output輸出-mapper'C:\ mfiles \ python的RandomSample.py 10' -file RandomSample.py

好運

+0

我的問題已經解決了您的答案。謝謝。 –