借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第1张图片

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第2张图片

点击上方【凌云驭势 重塑未来】

一起共赴年度科技盛宴!

随着客户的业务发展,终端用户的数据量以及大数据分析的需求也随之增加。此时,大数据分析的成本也随之上升。亚马逊云科技提供多种工具协助客户做成本优化,其中使用 EMR on EC2 Spot Instances 是常用且有效的方式,节省可高达90% 。

EMR on EC2 Spot Instances:

https://aws.amazon.com/cn/ec2/spot/use-case/emr/

Amazon EMR 实例组支持实例组(Instance Group)及实例集(Instance Fleets)两种配置,对比可参考以下表格:

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第3张图片

实例集的分配策略:

https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-instance-fleet.html#emr-instance-fleet-allocation-strategy

更多内容可参考集群配置指南及最佳实践

配置指南及最佳实践:

https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html

Instance Fleets 相比于Instance Group,不需要为 Amazon EMR 集群指定 Amazon EC2 可用区,并为 Amazon EMR 实例组指定 Amazon EC2 实例类型,只需要提供可用区和实例的列表,Amazon EMR 就会根据费用和可用性自动选择最优组合。客户在 EMR Instance Group 转为使用 Instance Fleets 后,大大增加了 Spot的 灵活度和成本优化。然而,Instance Fleets 当前只支持托管伸缩规则,暂未支持如 Instance Group 的自定义伸缩规则。当客户使用 EMR 托管扩展时,集群的扩展决策指标较多且无法基于业务特性自定义。

自定义伸缩规则:

https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-automatic-scaling.html

EMR 托管扩展:

https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-managed-scaling.html

决策指标:

https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/managed-scaling-metrics.html

对于客户有大量 EMR 集群,基于业务特性不同时伸缩阈值不同。尤其对于集群任务存在骤升骤降,且业务特征规律重复明显的情况,客户希望可自定义伸缩规则实现最大化的成本优化。

以下方案是 EMR Instance Fleets 通过 EventBridge、Lambda、DynamoDB 和 CloudWatch 实现 EMR Instance Fleets 自定义弹性伸缩。

01

服务介绍

Amazon EventBridge

Amazon EventBridge 是一种无服务器事件总线,可使用从您的应用程序、集成式软件即服务(SaaS)应用程序和 Amazon 服务生成的事件,更轻松地大规模构建事件驱动型应用程序。EventBridge 提供从事件源到目标对象的实时数据流。借助 EventBridge,可实现 Amazon Services 之间基于规则的实时驱动,同时也支持定时任务式的交互驱动。

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第4张图片

Amazon Lambda

Amazon Lambda 是一项高可用的 ServerLess 计算服务,可使用户无需预配置或管理服务器即可运行代码。用户可以运行 Lambda 以响应事件,在使用时只需负责自己写的代码(支持如 Node.js、Python、Java 等7种编程语言),通过代码来实现业务逻辑。基于 Lambda 用户可以实现在云上轻松实现服务间的自动化调用,提升云上服务效率。

Amazon DynamoDB

Amazon DynamoDB 是一种完全托管式、无服务器的 NoSQL 键值数据库,旨在运行任何规模的高性能应用程序。用户可以利用 DynamoDB 作为轻量化的键值数据库,用于存放自动化方案中需要引用的参数。同时,DynamoDB 与 Amazon 云上服务有多个灵活接口及 SDK,易于服务间交互。

Amazon CloudWatch

Amazon CloudWatch 是一种专门为 DevOps 工程师、开发人员、站点可靠性工程师(SRE)、IT 经理和产品拥有者设计的监控和可观测性服务。CloudWatch 为您提供相关数据和切实洞察,以监控应用程序、响应系统范围的性能变化并优化资源利用率。CloudWatch 以日志、指标和事件的形式收集监控和运营数据。您可以统一查看运行状况,获得在 Amazon 和本地运行的 Amazon 资源、应用程序和服务的完全可见性。

02

方案架构

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第5张图片

基于客户的需求,此方案架构可以基于客户自定义间隔定期触发 EventBridge 规则,读取 DynamoDB 中需要进行弹性伸缩集群的名称及参数,且比对 CloudWatch 中 EMR 集群的 YARNMemoryAvailablePercentage ,用于伸缩 TASK 节点组;比对 CloudWatch 中 EMR 集群的 HDFSUtilization,用于伸缩 CORE 节点组,同时伸缩前检查 DynamoDB 中 EMR 集群上次伸缩的时间,冷却时间内不进行伸缩,最后基于自定义阈值进行弹性伸缩。

通过此方案,客户针对 EMR Instance Fleets 集群基于自定义阈值进行弹性伸缩,可最大化的优化成本及精细化管理。

03

方案配置

创建 Dynamodb

1、创建 emr_scaling 表,输入以下信息,点击 Create:

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第6张图片

根据以下定义,创建对应的 Item:

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第7张图片

2、创建 emr-instancefleet-scaling 表,输入以下信息,点击 Create:

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第8张图片

创建 Lambda

1、配置 instancefleeting_auto_scaling 函数

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第9张图片

2、导入以下代码:

https://github.com/christofile/aws-emr-instancefleet-custom-scaling/blob/main/aws_emr_instancefleet_custom_scaling.py

3、配置 Lambda 函数 Permission 具有以下权限

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第10张图片

创建并 attach 以下 Policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ScalingPolicy",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2::table/emr-instancefleet-scaling",
                "arn:aws:dynamodb:us-west-2: ::table/emr_scaling"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstanceFleets",
                "elasticmapreduce:ListClusters",
                "cloudwatch:GetMetricStatistics",
                "elasticmapreduce:DescribeCluster",
                "elasticmapreduce:ModifyInstanceFleet"
            ],
            "Resource": "*"
        }
    ]
}

左滑查看更多

创建 EventBridge

4、配置 emr_instancefleet_schedule Rule

a. Event schedule

可根据业务需求定义定时任务的触发时间,建议和 CloudWatch 读取指标间隔(Interval)保持一致。

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第11张图片

b. Targets

Target 关联上面配置的 Lambda。

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第12张图片

配置完成后,可在 Lambda 侧看到以下关联关系

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第13张图片

01

方案测试

▌ 基于以上方案,配置完成后,按照以下步骤测试:

1、开启集群的托管伸缩规则

2、调度平台调度27个测试任务

3、记录执行的 Job Flow ID 以及执行时间

4、关闭集群的托管伸缩规则

5、在 DynamoDB emr_scaling 添加需要测试的集群及对应的参数,以下是配置示例:

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第14张图片

6、调度平台调度27个测试任务

7、记录执行的 Job Flow ID 以及执行时间。

▌ 测试结果:

测试1: 托管策略 执行时间:11min 花费 $26.5

测试2: 自定义策略 执行时间:13min 花费 $8.43

成本节省约68.2%。

05

总结

简而言之,Amazon 平台上服务多样且灵活。用户可以基于生产需求,通过无服务方式来实现自定义配置,精细化管理以及自动化流程。Amazon Lambda 可以通过定制化的方式来满足不同业务场景的需求,也可以和其他相关服务集成进一步提升运维自动化的能力。客户针对 EMR Instance Fleets 集群基于自定义阈值进行弹性伸缩,可最大化的优化成本及精细化管理。

本篇作者

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第15张图片

梁绮莹

亚马逊云科技解决方案架构师,专注于数字原生企业的云架构设计和咨询,负责支持全球头部电商公司云项目。在云网络、应用交付、应用层安全、CDN、容器及微服务等领域有丰富的实战经验。

329dc07744c10b190ba48dfb090510a9.png

2022亚马逊云科技 re:Invent 全球大会

中国行即将开启!

点击下方图片即刻注册

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第16张图片

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第17张图片

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第18张图片

听说,点完下面4个按钮

就不会碰到bug了!

借助 Serverless 服务实现 EMR Instance Fleets 集群自定义弹性伸缩_第19张图片

你可能感兴趣的:(serverless,大数据,阿里云,运维,云原生)