我正在尝试学习如何在亚马逊的EMR上运行java Map / Reduce(M / R)作业。我关注的文档在http://aws.amazon.com/articles/3938。我在Windows 7电脑上。
当我尝试运行此命令时,会显示帮助信息。
./elasticmapreduce-client.rb RunJobFlow streaming_jobflow.json
当然,因为我在Windows机器上,我实际输入此命令。我不知道为什么,但对于这个特殊的命令,没有一个Windows版本(所有命令成对显示,一个用于* nix,一个用于Windows)。
ruby elastic-mapreduce RunJobFlow my_job.json
我的问题是如何使用命令行界面(在Windows上)从Windows向亚马逊的EMR提交/运行作业?我试过在网上搜索,但我被带到了野外的地方。任何帮助表示赞赏。
感谢。
答案 0 :(得分:1)
嗯。我不确定RunJobFlow的例子有多久了......我个人会忽略它。
你能跑吗?
localhost$ elastic-mapreduce --describe
一旦你可以,那么你应该直接在群集上玩,以摆脱你需要做的确切步骤......值得这样做,这样你就不必多次启动/停止群集。
localhost$ elastic-mapreduce --create --alive --num-instances 1
localhost$ elastic-mapreduce -j j-YOUR_ID_HERE --ssh
cluster$ hadoop jar my.jar -D some=1 -D args=1 blah blah
cluster$ hadoop jar some_other_jar.jar -D foo -D bar
cluster$ ^D
localhost$ elastic-mapreduce -j j-YOUR_ID_HERE --terminate
然后当你对这些步骤感到满意并且你需要让它无头时(例如,来自cron)你可以让EMR协调这些步骤(包括群集在结束时自我终止)
localhost$ elastic-mapreduce --create --num-instances 1
localhost$ elastic-mapreduce --jar my_jar.jar --args "-D,some=1,-D,args=1,blah,blah"
localhost$ elastic-mapreduce --jar some_other_jar.jar --args "-D,foo,-D,bar"
如果你需要更复杂的步骤,我只会探索--json的东西,它有点神秘,很难在第一时间得到正确...
答案 1 :(得分:1)
要在EMR上运行流式传输作业,首先需要通过以下命令创建群集:
ruby elastic-mapreduce --create --alive --plain-output --master-instance-type m1.xlarge
--slave-instance-type m1.xlarge --num-instances 6 --name "Some Job Cluster" --bootstrap-action s3://<path-to-a-bootstrap-script>
这将返回一个jobid,它看起来像:j-ABCD7EF763
现在,您可以通过以下命令提交作业步骤:
ruby elastic-mapreduce -j j-ABCD7EF763 --stream --step-name "my step name" --mapper
s3://<some-path>/mapper-script.rb --reducer s3://<some=path>/reducer-script.rb --input
s3://<input-path> --output s3://<output-path>
您也可以直接运行作业而不是运行流作业,在这种情况下,群集将在作业结束时自行终止。
答案 2 :(得分:1)
尝试使用--json选项。
e.g。 ./elastic-mapreduce --create --name Multisteps --json wordcount_jobflow.json
您需要仅使用Steps修剪json文件(删除[]之外的所有内容)。有一个讨论的帖子:https://forums.aws.amazon.com/thread.jspa?threadID=35093