尝新阿里云E-MapReduce MetaService服务

阿里云E-MapReduce从EMR-2.1.0版本镜像开始,将在VPC集群中提供MetaService服务。

什么是MetaService服务?

从字面理解,MetaService服务提供用户查询集群Meta信息。包括哪些Meta信息呢?E-MapReduce
目前主要提供以下几种信息:

  • 集群所在Region
  • 集群角色AccessKeyId
  • 集群角色AccesskeySecret
  • 集群角色SecurityToken
  • 集群角色名
  • 集群所属网络类型

这些信息都可以用来做什么呢?集群所在Region和集群所属网络类型比较容易理解。我如果在杭州Region创建集群,那么可以通过查询MetaService获知当前集群处于“cn-hangzhou” Region。我如果创建VPC集群,那么通过查询MetaService可以获知当前集群网络类型为VPC。这些都是小Case。

角色属性对集群来说有什么意义呢?往下看!

为什么需要MetaService服务?

E-MapReduce从一开始就将OSS作为云上Hadoop集群的推荐存储介质(当然你也可以使用基于云盘的HDFS)。我们这么使用OSS存储:

    查看OSS目录

    hadoop fs -ls oss://Ubx***J8k:Na6J*******BIN@bucket.oss-cn-hangzhou-internal.aliyuncs.com/dir

    Hive建表

    hive> CREATE EXTERNAL TABLE people (id INT, name STRING)
    hive> ROW FORMAT DELIMITED
    hive> FIELDS TERMINATED BY ''/t'
    hive> LOCATION 'oss://Ubx***J8k:Na6J*******BIN@bucket.oss-cn-hangzhou-internal.aliyuncs.com/dir';

    SPARK SHELL

    scala> val data = sc.textFile("oss://Ubx***J8k:Na6J*******BIN@bucket.oss-cn-hangzhou-internal.aliyuncs.com/dir")
    scala> data.count

可以发现,

  1. 交互式查询中使用OSS数据源还是比较繁琐的,需要我们输入一长串的AK信息。当然,我们可以将
    AK信息写到配置文件中,但这种做法不够灵活。
  2. 首先我们一般是不建议用户直接使用AK的,最佳的实践方式是在RAM上创建子账号或者角色,然后使用子账号AK或者Token来完成资源的操作和api的调用。
  3. 开发人员接触到Root账号的AK,难免会存在泄露AK的风险。一旦泄露,造成的损失无法估量。

基于上述几个考虑,E-MapReduce一直在研究一种更好地使用集群的方式。这里我们就要谈到MetaService服务和集群的角色属性。解决这个问题的思路就是让用户在集群上的操作和AK解绑。在E-MapReduce控制台提交作业或者登陆集群运行作业,都不需要显式提供AK。E-MapReduce将基于RAM的角色功能,向用户提供带有Token的角色AK。所有对资源的操作都可以使用角色AK。这可以带来两个优势:

  1. 基于角色的思路可以让我们为每个集群定义专属的权限范围。例如,这个集群的作业只用到OSS资源,那么我们就限制角色的权限只能访问OSS。甚至,你可以限制这个集群只读只写OSS的某个目录。所有的操作可以在RAM控制台完成。
  2. E-MapReduce会自动维护用户的Token不失效,保证长作业或者Streaming类型作业。

有了MetaService服务,我们可以这么完成上面的操作:

  查看OSS目录

  hadoop fs -ls oss://bucket/dir

  Hive建表

  hive> CREATE EXTERNAL TABLE people (id INT, name STRING)
  hive> ROW FORMAT DELIMITED
  hive> FIELDS TERMINATED BY ''/t'
  hive> LOCATION 'oss://bucket/dir';

  SPARK SHELL

  scala> val data = sc.textFile("oss://bucket/dir")
  scala> data.count

是不是很方便?MetaService本质上是一个HTTP服务,你也可以这么访问它:curl http://localhost:10011/cluster-region,将会得到当前集群所属Region。当前MetaService支持以下路劲:

  • Region: “/cluster-region”
  • 角色名: “/cluster-role-name”
  • AccessKeyId:”/role-access-key-id”
  • AccessKeySecret:”/role-access-key-secret”
  • SecurityToken:”/role-security-token”
  • 网络类型:”/cluster-network-type”

如何开启MetaService

当前,E-MapReduce对MetaService的支持需要满足以下两个条件:

  1. 集群网络环境是VPC
  2. 集群版本高于EMR-2.1.0

有了这两个条件,你就可以在E-MapReduce控制台创建一个VPC集群。 在创建集群的“基础配置”-“权限设置”需要你手动授权一“AliyunEmrEcsDefaultRole”。这个只需要授权一次即可,如果已授权,会校验通过;如果还没有授权,则会校验失败,点击“前往授权”完成授权工作。

规划

EMR-2.1.0版本的MetaService只支持OSS数据源。后续版本将陆续支持更多数据源,例如LogService等等。

注意事项

  1. 当前只提供VPC环境下的MetaService服务。
  2. 谨慎删除,编辑“AliyunEmrEcsDefaultRole”,可能会造成集群创建失败或者作业运行失败。请在知
    晓后果的前提下修改“AliyunEmrEcsDefaultRole”。
上一篇:E-MapReduce上如何采集Kafka客户端Metrics


下一篇:SAP Spartacus 自定义 PageResolver 的用法