E-MapReduce环境提供了MetaService服务。基于MetaService服务,E-MapReduce集群可免AccessKey访问相应的阿里云资源。当前MetaService服务只支持免AccessKey访问OSS、LogService和MNS数据。

默认应用角色

在创建E-MapReduce集群时,您需要给E-MapReduce服务授权一个默认的应用角色(AliyunEmrEcsDefaultRole)。AliyunEmrEcsDefaultRole默认的权限策略如下:
{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:GetObject",
        "oss:ListObjects",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:ListBuckets",
        "oss:AbortMultipartUpload"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}

AliyunEmrEcsDefaultRole默认只具有OSS资源的访问权限,所以E-MapReduce作业默认只能基于MetaService免AccessKey访问OSS资源。如果您想免AccessKey访问其他阿里云资源(例如 LogService 等),则需要登录RAM 控制台给AliyunEmrEcsDefaultRole授予相应产品的访问权限。

注意 请谨慎编辑和删除默认角色AliyunEmrEcsDefaultRole,否则会造成集群创建失败或者作业运行失败。

自定义应用角色

大多数情况下,您只需要使用默认应用角色或者修改默认应用角色即可,但E-MapReduce还支持使用自定义的应用角色。在创建集群时,您可使用默认应用角色,也可自定义应用角色。创建角色并授权给服务的方法,请参见RAM 的相关文档

使用MetaService

基于MetaSerivce服务,您可通过E-MapReduce作业免AccessKey访问阿里云资源(OSS、LogService和MNS),其优势如下:
  • 降低AccessKey泄漏的风险。基于RAM,您可按最小够用原则给角色授权,做到权限最小化,这样可以将安全风险降到最低。
  • 提高用户体验。尤其在交互式访问OSS资源时,可避免让您输入一长串的OSS路径。
以下是使用MetaService(新)和不使用MetaService(旧)的对比示例:
I. Hadoop 命令行查看 OSS 数据
    旧方式: hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
    新方式: hadoop fs -ls oss://bucket/a/b/c
II. Hive建表
    旧方式:
        CREATE EXTERNAL TABLE test_table(id INT, name string)
        ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '/t'
        LOCATION 'oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c';
    新方式:
        CREATE EXTERNAL TABLE test_table(id INT, name string)
        ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '/t'
        LOCATION 'oss://bucket/a/b/c';
III. Spark
    旧方式: val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
    新方式: val data = sc.textFile("oss://bucket/a/b/c")

访问MetaService

MetaService是一个HTTP服务,您可直接访问这个HTTP服务来获取相关的Meta信息。例如,通过 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