我正在使用EMR将任务实例组作为专色实例。我想始终保持最小数量的任务实例。 意味着,每当EMR由于出价高于我们设定的价格而终止任务实例时,我的应用程序应该启动另一个具有更高出价的任务实例。
我的研究 -
问题
答案 0 :(得分:3)
现货价格如何运作
当以现货价格启动Amazon EC2实例时(包括从Amazon EMR启动时),如果当前现货价格低于提供的出价,则实例将启动。如果现货价格高于买入价,则终止该实例。实例只收取当前现货价格。
因此,不需要以“稍高的出价”启动新的现场实例的逻辑。 该实例将始终按当前现货价格 收取费用,因此只需按照您愿意为现货实例支付的最高价格出价。您将支付低于现货价格(太棒!)或您的实例将被终止,因为价格已经高于您愿意支付的价格(在这种情况下,您不希望为实例支付“稍高一点”) )。
如果您希望“始终保持最小数量的任务实例”,则要么支付正常的EMR费用(这意味着实例不会被终止),要么为特定实例支付特别大的价格,例如2 x正常价格。是的,您可能偶尔会为实例支付更多费用,但平均而言您的价格会非常低。
如果您希望特别偷偷摸摸,您可以出价达到EC2实例的正常价格,然后,如果实例终止,则启动更多任务节点而不使用现货定价。这样,您的实例将不会被终止,您将不会支付超过正常EC2价格。但是,当现货价格下跌时,您必须终止并替换这些实例,否则您支付的金额过高。这就是为什么在现货实例上提供高出价可能更好。
底线:使用现货定价,但要高价出价。你大部分时间都会得到一个好价钱。
答案 1 :(得分:1)
AWS EMR没有可用的自动缩放选项。但您可以使用AWS SQS来解决并集成Autoscaling。这是您可以整合的粗略图片。
这是AWS SQS Autoscaling的指南。
https://docs.aws.amazon.com/autoscaling/latest/userguide/as-using-sqs-queue.html
答案 2 :(得分:1)
正如已经正确指出的那样,EMR API为1)收集监控数据提供了所有必要的成分,2)以编程方式上下扩展集群。
基本上,为EMR集群实现自动扩展有两个主要选项:
这两种选择各有利弊。选项2的主要优点是它是一种无服务器方法(不需要运行自己的服务器)。另一方面,选项1确实需要服务器,但因此需要更多控制来自定义缩放规则的逻辑。此外,它允许保留可缩放决策历史记录的可搜索记录。
你可以看看Themis,一个在Atlassian开发的EMR自动缩放框架。 Themis实现了自动调节循环,如上面选项1中所述。当前功能包括主动和自动调节,支持现场/点播任务节点,它带有Web UI,并且该工具非常易于配置。
答案 3 :(得分:0)
我遇到了类似的问题,我想分享一个可能的选择。我编写了一个Java工具来在处理过程中动态调整EMR集群的大小。它可能对你有帮助。请查看:
http://www.lopakalogic.com/articles/hadoop-articles/dynamically-resize-emr/
源代码可在Github上找到