阿里云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
可以发现,
- 交互式查询中使用OSS数据源还是比较繁琐的,需要我们输入一长串的AK信息。当然,我们可以将
AK信息写到配置文件中,但这种做法不够灵活。 - 首先我们一般是不建议用户直接使用AK的,最佳的实践方式是在RAM上创建子账号或者角色,然后使用子账号AK或者Token来完成资源的操作和api的调用。
- 开发人员接触到Root账号的AK,难免会存在泄露AK的风险。一旦泄露,造成的损失无法估量。
基于上述几个考虑,E-MapReduce一直在研究一种更好地使用集群的方式。这里我们就要谈到MetaService服务和集群的角色属性。解决这个问题的思路就是让用户在集群上的操作和AK解绑。在E-MapReduce控制台提交作业或者登陆集群运行作业,都不需要显式提供AK。E-MapReduce将基于RAM的角色功能,向用户提供带有Token的角色AK。所有对资源的操作都可以使用角色AK。这可以带来两个优势:
- 基于角色的思路可以让我们为每个集群定义专属的权限范围。例如,这个集群的作业只用到OSS资源,那么我们就限制角色的权限只能访问OSS。甚至,你可以限制这个集群只读只写OSS的某个目录。所有的操作可以在RAM控制台完成。
- 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的支持需要满足以下两个条件:
- 集群网络环境是VPC
- 集群版本高于EMR-2.1.0
有了这两个条件,你就可以在E-MapReduce控制台创建一个VPC集群。 在创建集群的“基础配置”-“权限设置”需要你手动授权一“AliyunEmrEcsDefaultRole”。这个只需要授权一次即可,如果已授权,会校验通过;如果还没有授权,则会校验失败,点击“前往授权”完成授权工作。
规划
EMR-2.1.0版本的MetaService只支持OSS数据源。后续版本将陆续支持更多数据源,例如LogService等等。
注意事项
- 当前只提供VPC环境下的MetaService服务。
- 谨慎删除,编辑“AliyunEmrEcsDefaultRole”,可能会造成集群创建失败或者作业运行失败。请在知
晓后果的前提下修改“AliyunEmrEcsDefaultRole”。