我已经在我的笔记本电脑上构建了一个本地集群(伪模式)。我在哪里运行不同的 mapreduce 命令,例如
hadoop-streaming -D mapred.output.compress=true \
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-files my_mapper.py,my_reducer.py \
-mapper my_mapper.py \
-reducer my_reducer.py \
-input /aws/input/input_warc.txt \
-output /aws/output
现在我必须在 EMR 上运行它。有两个选项可以使用,一个是控制台,第二个是 aws cli。我想像上面那样运行命令。为此,我想如果我通过 ssh 连接到 EMR master,那么我应该能够运行这个命令。这是正确的方法还是这种方法有任何缺点?
最佳答案
是的,您可以通过 SSH 连接到您的集群并在那里运行您的作业,但您也可以使用 Step API ( http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-steps.html ) 在主实例上运行任意命令,当然包括像您的示例一样运行分布式作业。您可以使用 AWS CLI(“aws emr add-step ...”或在创建集群期间使用“aws emr create-cluster ... --steps ...”)或类似地使用 AWS 向集群添加步骤SDK(如 AWS Java SDK)或使用 AWS EMR 控制台。
Step API 的一些优势包括它捕获每个步骤的输出,以便您可以通过 AWS CLI、SDK 或 AWS 控制台查看它,您还可以检查步骤的状态以确定它们何时完成.
Step API 的一个缺点是目前所有 Steps 都是按顺序运行的,因此您不能并行运行多个 Steps。
关于amazon-web-services - 我可以像在本地集群上一样在 EMR 上运行作业吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608995/