使用资源编排服务(ROS)轻松玩转E-MapReduce(EMR)

本文涉及的产品
资源编排,不限时长
简介: 前言 如果您还没有听说过资源编排服务(ROS),那么恭喜您,本文将带您走进一个新的世界,学习资源管理的新姿势。 当您在使用E-MapReduce(EMR)时,是否想过使用OpenAPI或者是SDK来创建实例?是否为太多的参数感到困扰,为不一样的参数名称形态看到困惑?尤其是要通过代码管理整个实例的生命周期感到烦恼? 但您本不该为此烦恼,不是吗? 其实您只是想创建若干个资源,您不想关心应该调用

前言

如果您还没有听说过资源编排服务(ROS),那么恭喜您,本文将带您走进一个新的世界,学习资源管理的新姿势。

当您在使用E-MapReduce(EMR)时,是否想过使用OpenAPI或者是SDK来创建实例?是否为太多的参数感到困扰,为不一样的参数名称形态看到困惑?尤其是要通过代码管理整个实例的生命周期感到烦恼?

但您本不该为此烦恼,不是吗?

其实您只是想创建若干个资源,您不想关心应该调用什么API,调用的过程是怎样的。您应该有这样一位帮您管理资源的“管家”,只需告诉他需要什么样的资源,他就能立刻帮您创建出来,接着就可以安心使用这些资源。而在不需要这些资源的时候,告诉管家把它们都清理掉,他就帮您办的妥妥当当。

ROS 就是您的资源管家,您只需通过一个模板告诉它资源配置,剩下的事情就交给他了。

本文将为您讲解如何通过ROS来轻松的管理EMR。

EMR 集群资源

在 ROS 中,想要创建 EMR 集群资源,需要在模板中声明 EMR::Cluster 资源类型以及一些配置参数。

EMR::Cluster 的详细文档可见https://help.aliyun.com/document_detail/130249.html

基于已有VPC资源创建Hadoop集群

假设我们已经有了VPC、VSwitch实例,想要通过EMR创建Hadoop集群。这个集群中有一个Master节点和两个Core节点,那么我们轻松写出如下模板:

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Resources": {
    "Cluster": {
      "Type": "ALIYUN::EMR::Cluster",
      "Properties": {
        "NetType": "vpc",
        "Name": "MyCluster",
        "ClusterType": "HADOOP",
        "ZoneId": "<ZoneId>",
        "EmrVer": "EMR-3.21.0",
        "ChargeType": "PostPaid",
        "SecurityGroupId": "<SecurityGroupId>",
        "VpcId": "<VpcId>",
        "VSwitchId": "<VSwitchId>",
        "UseLocalMetaDb": true,
        "HostGroup": [
          {
            "NodeCount": 1,
            "HostGroupType": "MASTER",
            "DiskCount": 1,
            "DiskCapacity": 40,
            "DiskType": "CLOUD_EFFICIENCY",
            "SysDiskCapacity": 40,
            "SysDiskType": "CLOUD_EFFICIENCY",
            "InstanceType": "ecs.g5.xlarge",
            "ChargeType": "PostPaid"
          },
          {
            "NodeCount": 2,
            "HostGroupType": "CORE",
            "DiskCount": 4,
            "DiskCapacity": 40,
            "DiskType": "CLOUD_EFFICIENCY",
            "SysDiskCapacity": 40,
            "SysDiskType": "CLOUD_EFFICIENCY",
            "InstanceType": "ecs.g5.xlarge",
            "ChargeType": "PostPaid"
          }
        ]
      }
    }
  },
  "Outputs": {
    "ClusterId": {
      "Value": { "Fn::GetAtt": ["Cluster", "ClusterId"] }
    }
  }
}

 

这里,先讲解下这个模板中的关键点:

  • ROSTemplateFormatVersion 声明了ROS模板的语法版本,取固定值 2015-09-01
  • Resources 声明了要创建的资源。它是一个字典:
    • 其键(如文中的Cluster)是资源的逻辑ID,可以在其他资源或输出中通过这个ID来引用资源的属性;
    • 其值是资源的配置,即要创建什么样的资源,它具有如下属性:
      • Type 是资源类型,如示例中的 ALIYUN::EMR::Cluster 表明要创建一个EMR集群
      • Properties 是资源属性,随资源类型的不同而不同。比如对于类型为 ALIYUN::EMR::Cluster 的资源来说,其属性有NetType、Name、ClusterType、HostGroup等属性,而每个属性的含义与EMR的创建集群API保持一致,可参考https://help.aliyun.com/document_detail/130249.html#title-vvt-45x-jjq 

有了上面的模板,我们就可以通过ROS来轻松创建Hadoop集群了,关于控制台上的创建步骤,我们将在后文提及。

全新创建Hadoop集群

在上一个例子中,你可能有这样的疑问:

  • 如果是在已有VPC资源的情况下创建Hadoop集群,通过ROS写个模板来创建和通过EMR控制台来创建并没有任何优势,反而后者更快呢?
  • 模板中的一些参数(比如集群名称、集群类型、可用区等)是写死的,能否动态传入呢?

设想一下,现在我们需要全新地创建Hadoop集群,包括各种依赖的VPC资源。如果不用ROS,您需要:

  1. 在VPC控制台上创建VPC、VSwith实例
  2. 在ECS控制台上创建安全组实例
  3. 在EMR控制台上创建集群

而使用ROS后,在一个模板中就能做到这些事情。

我们也可以在模板中声明和引用参数,这样就能够做到同一份模板,使用不同的参数,以创建不同规格的资源。于是,就有了下面的模板:

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "ClusterName": {
      "Type": "String",
      "Description": "The EMR cluster name",
      "Default": "MyCluster"
    },
    "VpcName": {
      "Type": "String",
      "Description": "The VPC name",
      "Default": "EmrVpc"
    },
    "VSwitchName": {
      "Type": "String",
      "Description": "The VSwitch name",
      "Default": "EmrVSwitch"
    },
    "SecurityGroupName": {
      "Type": "String",
      "Description": "The security group name",
      "Default": "EmrSecurityGroup"
    },
    "ZoneId": {
      "Type": "String",
      "Description": "The security group name",
      "Label": "Security Group Name",
      "Default": "cn-beijing-g"
    },
    "InstanceType": {
        "Type": "String",
        "Description": "Instance type, <a href='#/product/cn-beijing/list/typeList' target='_blank'>View instance types</a>",
        "AllowedValues": [
          "ecs.g5.large",
          "ecs.g5.xlarge",
          "ecs.g5.2xlarge",
          "ecs.g5.3xlarge"
        ],
        "Default": "ecs.g5.large"
      }
  },
  "Resources": {
    "VPC": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": "192.168.0.0/16",
        "VpcName": {
          "Ref": "VpcName"
        }
      }
    },
    "VSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VpcId": {
          "Ref": "VPC"
        },
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VSwitchName": {
          "Ref": "VSwitchName"
        },
        "CidrBlock": "192.168.0.0/16"
      }
    },
    "SecurityGroup": {
      "Type": "ALIYUN::ECS::SecurityGroup",
      "Properties": {
        "SecurityGroupName": {
          "Ref": "SecurityGroupName"
        },
        "VpcId": {
          "Ref": "VPC"
        }
      }
    },
    "Cluster": {
      "Type": "ALIYUN::EMR::Cluster",
      "Properties": {
        "NetType": "vpc",
        "Name": "ros-emr-cluster-test",
        "ClusterType": "DRUID",
        "ZoneId": "cn-beijing-g",
        "EmrVer": "EMR-3.21.0",
        "ChargeType": "PostPaid",
        "SecurityGroupId": {
          "Ref": "SecurityGroup"
        },
        "VpcId": {
          "Ref": "VPC"
        },
        "VSwitchId": {
          "Ref": "VSwitch"
        },
        "UseLocalMetaDb": true,
        "HostGroup": [
          {
            "NodeCount": 1,
            "HostGroupType": "MASTER",
            "DiskCount": 1,
            "DiskCapacity": 40,
            "DiskType": "CLOUD_EFFICIENCY",
            "SysDiskCapacity": 40,
            "SysDiskType": "CLOUD_EFFICIENCY",
            "InstanceType": {
                "Ref": "InstanceType"
            },
            "ChargeType": "PostPaid"
          },
          {
            "NodeCount": 2,
            "HostGroupType": "CORE",
            "DiskCount": 4,
            "DiskCapacity": 40,
            "DiskType": "CLOUD_EFFICIENCY",
            "SysDiskCapacity": 40,
            "SysDiskType": "CLOUD_EFFICIENCY",
            "InstanceType": {
                "Ref": "InstanceType"
            },
            "ChargeType": "PostPaid"
          }
        ]
      }
    }
  },
  "Outputs": {
    "ClusterId": {
      "Value": { "Fn::GetAtt": ["Cluster", "ClusterId"] }
    }
  }
}

相较于上一个示例模板,此模板做了如下改动:

  • 新增了 Parameters,用于定义模板参数。比如我们定义了ClusterName、VpcName、VSwitchName、SecurityGroupName、ZoneId、InstanceType等参数,并给了默认值。尤其是对于参数InstanceType,我们通过AllowedValues限定了取值范围。这些参数在 Resources 中可以用 {"Ref": "<参数名称>"} 的形式进行引用
  • Resources 中新增了对网络资源的创建:
    • VPC实例 —— 自定义逻辑 ID为 VPC,类型为 ALIYUN::ECS::VPC
    • VSwitch实例 ——自定义逻辑 ID为 VSwitch,类型为 ALIYUN::ECS::VSwitch
    • 安全组实例 —— 自定义逻辑 ID为 SecurityGroup,类型为 ALIYUN::ECS::SecurityGroup
  • 在资源中,也可以通过 {"Ref": "<资源逻辑 ID>"} 的形式引用其他资源的实例 ID。如下例子中:
    • VpcId 引用自逻辑 ID 为 VPC 的实例 ID
    • ZoneId 引用自模板参数 ZoneId
    • VSwitchName 引用自模板参数 VSwitchName
    "VSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VpcId": {
          "Ref": "VPC"
        },
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VSwitchName": {
          "Ref": "VSwitchName"
        },
        "CidrBlock": "192.168.0.0/16"
      }
    }

 

在写好上述模板后,我们就能通过ROS轻松创建出VPC、VSwitch、安全组和EMR集群。

 

ROS 控制台使用示例

1. 访问 ROS 控制台,点击”新建资源栈“,进入创建页面,输入写好的模板。

2. 点击下一步,进入配置界面,输入栈名、参数等信息,点击”创建“即可轻松创建出EMR集群。

3. 访问 ROS 控制台,即可看到创建出资源栈。

4. 点击栈名称,可看到更加详细的信息。下图展示了这个栈中的所有资源,也就是我们之前在模板中定义的VPC、VSwitch、安全组和EMR集群。

5. 当我们不需要这些资源时,在资源栈管理界面中点击”删除“,并在弹出的界面中勾选”释放资源“,即可一键删除所有资源。

 

小结

通过在模板中声明需要哪些资源(如VPC、EMR等),根据情况定义模板参数和输出,即可使用该模板在任意区域(Region)创建和管理这些资源。ROS 作为资源管家,会帮您处理好资源创建到删除的完整的生命周期。通过这种配置即代码(Config as Code)的方式,您可以轻松创建出想要的资源,从而把更多的精力放在业务逻辑上。

作为 ROS 轻松玩转各产品系列的开始,本文只是带您初步领略 ROS 的魅力。后续文章中,将会介绍更多的产品,总有一款会符合您的口味!

 

 

 

 

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
1月前
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
43 3
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
|
1月前
|
弹性计算 人工智能 持续交付
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
56 2
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
|
2月前
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
67 4
ROS2教程05 ROS2服务
|
2月前
|
机器人
ROS2教程 05 服务Service
本文是关于ROS2(机器人操作系统2)中服务(Service)机制的教程,介绍了服务与话题(Topic)的区别、ROS2服务的相关命令,包括列出服务、查找服务、获取服务类型和调用服务,并通过示例代码展示了如何创建服务端(Server)和客户端(Client),以及如何测试服务调用过程。
118 0
ROS2教程 05 服务Service
|
3月前
|
弹性计算 关系型数据库 MySQL
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
WordPress 是流行的开源CMS,阿里云的ROS(Resource Orchestration Service)提供模板化部署服务,简化云上环境如VPC、ECS、MySQL的创建。用户可通过ROS控制台选择模板一键部署WordPress,配置包括实例区、类型、系统盘及密码等参数。ROS模板定义了资源、参数和输出,自动处理依赖关系,实现云资源和应用的自动化部署。通过ROS,用户可以高效管理和更新整个资源栈,实现快速、可靠的云服务部署。
213 1
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
|
2月前
|
分布式计算 API Go
通过MapReduce降低服务响应时间
通过MapReduce降低服务响应时间
|
3月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
4月前
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
66 1
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
4月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
Flowise 是一个开源低代码平台,用于构建定制化的 LLM 流程和 AI 代理。阿里云的 Resource Orchestration Service (ROS) 提供了一键部署 Flowise 到 ECS 实例的方案。用户只需在 ROS 控制台配置模板参数,如可用区和实例类型,即可完成部署。部署后,从资源栈输出获取 Flowise 服务地址以开始使用。ROS 模板定义了 VPC、ECS 实例等资源,并通过 ROS 自动化部署,简化了云上资源和应用的管理。
219 1
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
|
4月前
|
JSON 弹性计算 运维
深入浅出资源编排ROS:构建云环境下的自动化运维利器引言
**资源编排ROS是阿里云提供的自动化管理工具,通过声明式模板定义云资源生命周期,简化复杂IT架构的运维。它解析JSON或YAML模板,自动创建、更新资源,确保状态与模板一致。ROS用于环境一致性、故障恢复、成本优化,是现代云管理的关键,助力企业提升效率和成本效益。**
143 3

推荐镜像

更多