如何自动调整EMR任务实例

时间:2016-07-30 10:36:26

标签: amazon-web-services cloud amazon-sqs amazon-emr amazon-cloudwatch

我正在使用EMR将任务实例组作为专色实例。我想始终保持最小数量的任务实例。 意味着,每当EMR由于出价高于我们设定的价格而终止任务实例时,我的应用程序应该启动另一个具有更高出价的任务实例。

我的研究 -

  1. 使用Cloudwatch在违反阈值时通知,并自动调整任务实例。但根据研究,EMR中没有自动缩放的概念。
  2. 使用Cloudwatch,并在阈值突发时通知SQS,并且有一个服务始终在使用和扩展任务实例。
  3. 问题

    1. EMR中是否存在自动缩放?如果可以,那么我的努力将减少到只设置阈值和相应的扩展任务实例动作。
    2. 如果您有任何其他方法可以解决此问题,请提出建议。

4 个答案:

答案 0 :(得分:3)

现货价格如何运作

当以现货价格启动Amazon EC2实例时(包括从Amazon EMR启动时),如果当前现货价格低于提供的出价,则实例将启动。如果现货价格高于买入价,则终止该实例。实例只收取当前现货价格

因此,不需要以“稍高的出价”启动新的现场实例的逻辑。 该实例将始终按当前现货价格 收取费用,因此只需按照您愿意为现货实例支付的最高价格出价。您将支付低于现货价格(太棒!)或您的实例将被终止,因为价格已经高于您愿意支付的价格(在这种情况下,您不希望为实例支付“稍高一点”) )。

如果您希望“始终保持最小数量的任务实例”,则要么支付正常的EMR费用(这意味着实例不会被终止),要么为特定实例支付特别大的价格,例如2 x正常价格。是的,您可能偶尔会为实例支付更多费用,但平均而言您的价格会非常低。

如果您希望特别偷偷摸摸,您可以出价达到EC2实例的正常价格,然后,如果实例终止,则启动更多任务节点而不使用现货定价。这样,您的实例将不会被终止,您将不会支付超过正常EC2价格。但是,当现货价格下跌时,您必须终止并替换这些实例,否则您支付的金额过高。这就是为什么在现货实例上提供高出价可能更好。

底线:使用现货定价,但要高价出价。你大部分时间都会得到一个好价钱。

答案 1 :(得分:1)

AWS EMR没有可用的自动缩放选项。但您可以使用AWS SQS来解决并集成Autoscaling。这是您可以整合的粗略图片。

  1. 使用现场实例启动您的EMR集群。
  2. 设置SQS队列并创建3个触发器,一个用于CPU阈值,第二个用于EC2现场实例终止通知,第三个用于更改现场实例出价。
  3. 因此,如果CPU使用率增加,SQS将触发事件以启动集群的新实例,如果有现场实例终止通知SQS将触发启动另一个实例以平衡负载并发送事件以将出价更改为启动另一个现场实例。 (这只是草图,但我想你会明白这个逻辑。
  4. 这是AWS SQS Autoscaling的指南。

    https://docs.aws.amazon.com/autoscaling/latest/userguide/as-using-sqs-queue.html

答案 2 :(得分:1)

正如已经正确指出的那样,EMR API为1)收集监控数据提供了所有必要的成分,2)以编程方式上下扩展集群。

基本上,为EMR集群实现自动扩展有两个主要选项:

  1. 自动调节循环:在服务器上运行并持续监视集群当前负载的进程。可以定期收集性能指标(内存,CPU,I / O等)并存储在数据库中。根据性能指标评估自动调节规则,并在需要时按比例放大或缩小集群的任务节点。
  2. 基于事件的自动扩展:使用CloudWatch指标(例如,EMREC2的指标),您可以以编程方式定义在特定条件下触发的触发器(例如,如果平均CPUUtilization为所有节点都超过80%)。
  3. 这两种选择各有利弊。选项2的主要优点是它是一种无服务器方法(不需要运行自己的服务器)。另一方面,选项1确实需要服务器,但因此需要更多控制来自定义缩放规则的逻辑。此外,它允许保留可缩放决策历史记录的可搜索记录。

    你可以看看Themis,一个在Atlassian开发的EMR自动缩放框架。 Themis实现了自动调节循环,如上面选项1中所述。当前功能包括主动和自动调节,支持现场/点播任务节点,它带有Web UI,并且该工具非常易于配置。

答案 3 :(得分:0)

我遇到了类似的问题,我想分享一个可能的选择。我编写了一个Java工具来在处理过程中动态调整EMR集群的大小。它可能对你有帮助。请查看:

http://www.lopakalogic.com/articles/hadoop-articles/dynamically-resize-emr/

源代码可在Github上找到