0

我已经能够很好地使用 elastic-mapreduce ruby​​ 库启动工作流程。现在我有一个实例在它的工作完成后仍然“活着”。我已经登录到使用 SSH 并想开始另一项工作,但我的各种尝试都失败了,因为 hadoop 找不到输入文件。我尝试将输入文件存储在本地和 S3 上。

如何直接从我的 SSH 会话中创建新的 hadoop 作业?

我尝试的错误:

(第一次尝试使用本地文件存储,我是通过使用 SFTP 上传文件创建的)

hadoop jar hadoop-0.20-streaming.jar \
-input /home/hadoop/mystic/search_sets/test_sample.txt \
-output /home/hadoop/mystic/search_sets/test_sample_output.txt \
-mapper /home/hadoop/mystic/ctmp1_mapper.py \
-reducer /home/hadoop/mystic/ctmp1_reducer.py \
-file /home/hadoop/mystic/ctmp1_mapper.py \
-file /home/hadoop/mystic/ctmp1_reducer.py

11/10/04 22:33:57 ERROR streaming.StreamJob: Error Launching job :Input path does not exist: hdfs://ip-xx-xxx-xxx-xxx.us-west-1.compute.internal:9000/home/hadoop/mystic/search_sets/test_sample.txt

(使用 s3 的第二次尝试):

hadoop jar hadoop-0.20-streaming.jar \
-input s3n://xxxbucket1/test_sample.txt \
-output /home/hadoop/mystic/search_sets/test_sample_output.txt \
-mapper /home/hadoop/mystic/ctmp1_mapper.py \
-reducer /home/hadoop/mystic/ctmp1_reducer.py \
-file /home/hadoop/mystic/ctmp1_mapper.py \
-file /home/hadoop/mystic/ctmp1_reducer.py

11/10/04 22:26:45 ERROR streaming.StreamJob: Error Launching job : Input path does not exist: s3n://xxxbucket1/test_sample.txt
4

1 回答 1

2

第一个是行不通的。Hadoop 将在 HDFS 中查找该位置,而不是本地存储。如果您使用前缀,它可能会起作用,如下所示:file://

-input file:///home/hadoop/mystic/search_sets/test_sample.txt

不过,我从未尝试过使用流式输入进行此操作,即使它确实有效,它也可能不是最好的主意。

第二个(S3)应该工作。我们一直这样做。确保文件实际存在:

hadoop dfs -ls s3n://xxxbucket1/test_sample.txt

或者,您可以将文件放在 HDFS 中并正常使用。不过,对于 EMR 中的工作,我通常发现 S3 是最方便的。

于 2011-10-05T15:37:51.673 回答