E-MapReduce環境下提供MetaService服務。基於此服務,您可以在E-MapReduce叢集中以免AK的方式訪問阿里雲資源。
預設應用角色
預設地,您在建立叢集時將需要向E-MapReduce服務授權一個應用角色(AliyunEmrEcsDefaultRole)。授權之後,您在E-MapReduce上的作業將可以無需顯式輸入AK來訪問阿里雲資源。AliyunEmrEcsDefaultRole預設授予以下權限原則:
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects",
"oss:PutObject",
"oss:DeleteObject",
"oss:ListBuckets",
"oss:AbortMultipartUpload"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
所以預設情況下,基於MetaService的作業將只能訪問OSS資料。如果您想基於MetaService訪問其他阿里雲資源,例如LogService等等,則需要給AliyunEmrEcsDefaultRole補充授予相應的許可權。以上操作需要登入RAM控制台完成。
注意 當前metaservice服務只支援OSS,LogService和MNS資料的免AK操作。請謹慎編輯,刪除預設角色,否則會造成叢集建立失敗或者作業運行失敗。
自訂應用角色
大多數情況下,您只需要使用預設應用角色或者修改預設應用角色即可。E-MapReduce同時支援您使用自訂的應用角色。在建立叢集時,您既可以使用預設應用角色,也可以選擇自訂應用角色。如何建立角色並授權給服務,請參考RAM的相關文檔。
訪問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
使用MetaService
基於MetaSerivce服務,我們可以在作業中免AK地訪問阿里雲資源,這樣可以帶來兩個優勢:
- 降低AK泄漏的風險。基於RAM的使用方式,可以將安全風險降到最低。需要什麼許可權就給角色授予什麼許可權,做到許可權最小化。
- 提高使用者體驗。尤其在互動式訪問OSS資源時,可以避免寫一長串的OSS路徑。
下面樣本幾種使用方式:
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")