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")