尝试使用较新的AMI 3.0.1运行流媒体作业: 我得到的错误如下:
Error: java.lang.RuntimeException: Error in configuring object
...
Caused by: java.io.IOException: Cannot run program "s3://elasticmapreduce/samples/wordcount/wordSplitter.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:219)
... 23 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 24 more
对于一个非常基本的示例工作:
elastic-mapreduce --create --ami-version 3.0.1 --instance-type m1.large \
--log-uri s3n://mybucket/logs --stream \
--mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py \
--input s3://mybucket/input/alice.txt \
- 输出s3:// mybucket / output --reducer aggregate
在AMI 2.4.2上运行相同的工作时工作正常:
elastic-mapreduce --create --instance-type m1.large \
--log-uri s3n://mybucket/logs --stream \
--mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py \
--input s3://mybucket/input/alice.txt \
--output s3://mybucket/output --reducer aggregate
我需要使用AMI 3.0.1,因为其他自定义JAR步骤使用Hadoop 2.2.0。
答案 0 :(得分:0)
虽然不完全是这个具体问题的答案,但这个问题让我在直接在EMR Master上开始工作时遇到同样的问题时确定答案。
我遇到的问题的解决方案(使用AMI v3.x.x提供的Hadoop 2.x)需要使用-files选项:
hadoop jar contrib/streaming/hadoop-streaming.jar \
-files s3n://<my bucket>/mapper.py,s3n://<my bucket>/reducer.py \
-input s3n://<my bucket>/location/* \
-output s3n://<my bucket>/emr-output \
-mapper mapper.py \
-reducer reducer.py
在先前版本的Hadoop(由AMI v2.4.x提供的Hadoop 1.x)中,以下声明正常工作:
hadoop jar contrib/streaming/hadoop-streaming.jar \
-input s3n://<my bucket>/location/* \
-output s3n://<my bucket>/emr-output \
-mapper s3n://<my bucket>/mapper.py \
-reducer s3n://<my bucket>/reducer.py