[英]How to autoscale EMR task instances
我将EMR与任务实例组一起用作竞价型实例。 我想始终保持最小数量的任务实例。 就是说,每当EMR由于出价高于我们设置的价格而终止任务实例时,我的应用程序都应以较低的出价启动另一个任务实例。
我的研究
问题
现货价格如何运作
当以现货价格启动Amazon EC2实例时(包括从Amazon EMR启动时),如果当前现货价格低于提供的买入价 ,则实例将启动。 如果现货价格上涨到高于买入价,则实例终止。 实例仅按当前现货价收费 。
因此,不需要以“稍高的出价”启动新的现货实例的逻辑。 该实例将始终按照当前的现货价格收费 ,因此只需出价与您愿意为该现货实例支付的价格一样高即可。 您将支付的价格低于现货价格(最高!),或者您的实例将被终止,因为价格已经超出了您愿意支付的价格(在这种情况下,您不想为该实例支付“稍高的价格”) )。
如果您希望一直“保持最少的任务实例数量”,则要么支付正常的EMR费用(这意味着实例不会被终止),要么为现货实例出价特别高的价格,例如2倍正常价格 。 是的,您有时可能会为实例支付更高的价格,但是平均而言,您的价格会很低。
如果您想偷偷摸摸,可以出价EC2实例的正常价格,然后,如果实例终止,则启动更多任务节点而不使用现货定价。 这样,您的实例将不会被终止,您所支付的费用也不会超过正常的EC2价格。 但是, 当现货价格下降时 , 您将不得不终止并替换这些实例 ,否则您将付出太多。 这就是为什么最好在您的现货实例上提供高出价的原因。
底线:使用现货定价,但要价高。 大多数时候您会得到一个不错的价格。
AWS EMR没有可用的自动缩放选项。 但是您可以使用AWS SQS进行变通并集成Autoscaling。 这是您可以集成的粗略图片。
这是AWS SQS自动缩放的指南。
https://docs.aws.amazon.com/autoscaling/latest/userguide/as-using-sqs-queue.html
正如已经正确指出的那样,EMR API提供了所有必要的要素,以1)收集监视数据,以及2)以编程方式向上和向下扩展群集。
基本上,有两个主要选项可为EMR群集实现自动扩展:
两种选择都有其优点和缺点。 选项2的主要优点是它是一种无需服务器的方法(不需要运行您自己的服务器)。 另一方面,选项1确实需要服务器,但因此具有更多的控件来自定义扩展规则的逻辑。 而且,它允许保留可伸缩决策历史记录的可搜索记录。
您可以看一下Atmissian开发的EMR自动缩放框架Themis 。 Themis实现了上面的选项1中讨论的自动缩放循环。 当前的功能包括主动和被动自动缩放,对点/按需任务节点的支持,它带有Web UI,并且该工具易于配置。
我有一个类似的问题,我想分享一个可能的选择。 我编写了一个Java工具来在处理过程中动态调整EMR集群的大小。 它可能会帮助您。 在以下位置查看:
http://www.lopakalogic.com/articles/hadoop-articles/dynamically-resize-emr/
源代码在Github上可用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.