E-MapReduce は MetaService をサポートしています。 MetaService を使用して、 AccessKey を使用せず E-MapReduce クラスター内の Alibaba Cloud リソースにアクセスします。

デフォルトのアプリケーションロール

E-MapReduce クラスターの作成時に、デフォルトのアプリケーションロール AliyunEmrEcsDefaultRole を E-MapReduce に付与できます。 その後、E-MapReduce ジョブは、明示的に AccessKey を提供しなくても Alibaba Cloud リソースにアクセスできます。 デフォルトでは、以下の権限ポリシーが AliyunEmrEcsDefaultRole に付与されています。
{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:GetObject",
        "oss:ListObjects",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:ListBuckets",
        "oss:AbortMultipartUpload"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
つまり、MetaService ベースのジョブは、デフォルトで Object Storage Service (OSS) データのみにアクセスできます。 MetaService ベースのジョブが Log Service データなどの他の Alibaba Cloud リソースにアクセスできるようにするには、AliyunEmrEcsDefaultRole に必要な権限を付与する必要があります。 デフォルトのアプリケーションロールを E-MapReduce に付与し、 リソースアクセス管理 (RAM) コンソール でロールの権限を設定できます。
重要 現在、MetaService では、AccessKey を提供せずに、OSS、ログサービス、およびメッセージサービス (MNS) のデータのみにアクセスできます。 デフォルトのアプリケーションロールを編集または削除するには注意が必要です。 ロールを誤って編集または削除した場合、クラスターの作成またはジョブの実行を失敗する可能性があります。

アプリケーションロールのカスタマイズ

デフォルトのアプリケーションロールは、ほとんどのビジネス要件を満たすことができます。 必要に応じて、直接使用したり編集したりできます。 E-MapReduce を使用すると、独自のアプリケーションロールの作成も可能です。 つまり、クラスターを作成するときに、デフォルトのアプリケーションロールを使用するか、カスタムアプリケーションロールを選択できます。 ロールを作成してサービスに付与する方法の詳細については、「RAMドキュメント」をご参照ください。

メタサービスへのアクセス

MetaService は、ハイパーテキスト転送プロトコル (HTTP) です。 MetaService にアクセスして、メタデータ情報を取得できます。 たとえば、curl http://localhost:10011/cluster-region コマンド を実行して現在のクラスターが存在するリージョンを取得できます。

現在、MetaService を使用して次の情報を取得できます。
  • リージョン /cluster-region
  • ロール名 /cluster-role-name
  • AccessKeyId /role-access-key-id
  • AccessKeySecret /role-access-key-secret
  • セキュリティトークン /role-security-token
  • ネットワークタイプ /cluster-network-type

メタサービスの使用

ジョブは、AccessKey を提供せずに MetaService を使用して Alibaba Cloud リソースにアクセスできます。これには、次の利点があります。
  • AccessKey 漏洩のリスクを軽減します。 RAM ロールを使用すると、セキュリティリスクを最小限に抑えることができます。 ロールに必要な権限のみを付与できます。 これにより、付与される許可が最小限に抑えられます。
  • ユーザーエクスペリエンスを向上させます。 MetaService は、入力の必要がある OSS パスを短縮するため、OSS リソースへのアクセスに特に便利です。
次の例は、MetaService の使用方法を示しています。
I. Hadoop
    Previously, we used: hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
    Now, we use: hadoop fs -ls oss://bucket/a/b/c
II. Hive
    Previously, we used:
        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';
    Now, we use:
        CREATE EXTERNAL TABLE test_table(id INT, name string)
        ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '/t'
        LOCATION 'oss://bucket/a/b/c';
III. Spark
    Previously, we used: val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
    Now, we use: val data = sc.textFile("oss://bucket/a/b/c")