E-MapReduce環境提供了MetaService服務,MetaService服務是一種特殊的ECS應用角色。EMR 3.32及之前版本和EMR 4.5及之前版本,建立時會自動綁定該角色。在EMR叢集之上啟動並執行應用程式通過該角色來獲得與其他雲端服務互動的許可權,實現以免AccessKey的方式訪問阿里雲資源,避免了在設定檔中暴露AccessKey的風險。
前提條件
已授權該角色,詳情請參見阿里雲帳號角色授權。
背景資訊
當前MetaService服務僅支援免AccessKey訪問OSS、LogService和MNS資料。
許可權內容
預設服務角色AliyunEmrEcsDefaultRole包含系統權限原則為AliyunEmrECSRolePolicy,OSS相關許可權內容如下。
許可權名稱(Action) | 許可權說明 |
oss:PutObject | 上傳檔案或檔案夾對象。 |
oss:GetObject | 擷取檔案或檔案夾對象。 |
oss:ListObjects | 查詢檔案清單資訊。 |
oss:DeleteObject | 刪除某個檔案。 |
oss:ListBuckets | 列舉儲存空間(Bucket)。 |
oss:AbortMultipartUpload | 終止MultipartUpload事件。 |
oss:ListMultipartUploads | 列舉所有執行中的Multipart Upload事件。 |
oss:RestoreObject | 解凍歸檔類型(Archive)或冷歸檔(Cold Archive)的檔案(Object)。 |
oss:GetBucketInfo | 查看儲存空間(Bucket)的相關資訊。 |
oss:ListObjectVersions | 用於列出Bucket中包括刪除標記(Delete Marker)在內的所有Object的版本資訊。 |
oss:DeleteObjectVersion | 刪除指定版本Object。 |
oss:PostDataLakeStorageFileOperation | OSS-HDFS存取權限。 |
ots:CreateTable | 根據給定的表結構資訊建立相應的資料表。 |
ots:DeleteTable | 刪除本執行個體下指定的表。 |
ots:GetRow | 根據指定的主鍵讀取單行資料。 |
ots:PutRow | 插入資料到指定的行。 |
ots:UpdateRow | 更新指定行的資料。 |
ots:DeleteRow | 刪除一行資料。 |
ots:GetRange | 讀取指定主鍵範圍內的資料。 |
ots:BatchWriteRow | 批量插入、修改或刪除一個或多個表中的若干行資料。 |
ots:BatchGetRow | 批量讀取一個表或多個表中的若干行資料。 |
ots:ComputeSplitPointsBySize | 將全表的資料在邏輯上劃分成接近指定大小的若干分區,返回這些分區之間的分割點以及分區所在機器的提示。 |
ots:StartLocalTransaction | 為分區索引值建立一個局部事務,並擷取局部事務ID。 |
ots:CommitTransaction | 提交局部事務。 |
ots:AbortTransaction | 丟棄局部事務。 |
dlf:BatchCreatePartitions | 大量建立分區。 |
dlf:BatchCreateTables | 大量建立資料表。 |
dlf:BatchDeletePartitions | 大量刪除分區。 |
dlf:BatchDeleteTables | 大量刪除表。 |
dlf:BatchGetPartitions | 批量擷取分區列表。 |
dlf:BatchGetTables | 批量擷取資料表列表。 |
dlf:BatchUpdatePartitions | 批次更新分區資訊。 |
dlf:BatchUpdateTables | 批次更新資料表。 |
dlf:CreateDatabase | 建立資料庫。 |
dlf:CreateFunction | 建立函數。 |
dlf:CreatePartition | 建立分區。 |
dlf:CreateTable | 建立資料表。 |
dlf:DeleteDatabase | 刪除資料庫。 |
dlf:DeleteFunction | 刪除函數。 |
dlf:DeletePartition | 刪除分區。 |
dlf:DeleteTable | 刪除資料表。 |
dlf:GetDatabase | 擷取資料庫。 |
dlf:GetFunction | 擷取函數。 |
dlf:GetPartition | 擷取分區。 |
dlf:GetTable | 擷取資料表。 |
dlf:ListCatalogs | 擷取資料目錄列表。 |
dlf:ListDatabases | 擷取資料庫列表。 |
dlf:ListFunctionNames | 擷取函數名稱列表。 |
dlf:ListFunctions | 擷取函數列表。 |
dlf:ListPartitionNames | 擷取分區名稱列表。 |
dlf:ListPartitions | 擷取分區列表。 |
dlf:ListPartitionsByExpr | 按條件擷取中繼資料表分區列表。 |
dlf:ListPartitionsByFilter | 按條件擷取中繼資料表分區列表。 |
dlf:ListTableNames | 擷取資料表名稱列表。 |
dlf:ListTables | 擷取資料表列表。 |
dlf:RenamePartition | 修改分區名稱。 |
dlf:RenameTable | 修改資料表名稱。 |
dlf:UpdateDatabase | 更新資料庫資訊。 |
dlf:UpdateFunction | 更新函數資訊。 |
dlf:UpdateTable | 更新資料表資訊。 |
dlf:UpdateTableColumnStatistics | 更新中繼資料表統計資訊。 |
dlf:GetTableColumnStatistics | 擷取中繼資料表統計資訊。 |
dlf:DeleteTableColumnStatistics | 刪除中繼資料表統計資訊。 |
dlf:UpdatePartitionColumnStatistics | 更新分區統計資訊。 |
dlf:GetPartitionColumnStatistics | 擷取分區統計資訊。 |
dlf:DeletePartitionColumnStatistics | 刪除分區統計資訊。 |
dlf:BatchGetPartitionColumnStatistics | 批量擷取表分區統計資訊。 |
dlf:CreateLock | 建立中繼資料鎖。 |
dlf:UnLock | 解鎖指定的中繼資料鎖。 |
dlf:AbortLock | 終止中繼資料鎖。 |
dlf:RefreshLock | 重新整理中繼資料鎖。 |
dlf:GetLock | 擷取中繼資料鎖。 |
dlf:GetAsyncTaskStatus | 擷取非同步任務狀態。 |
dlf:DeltaGetPermissions | 擷取許可權列表。 |
dlf:GetPermissions | 擷取資料許可權資訊。 |
dlf:GetServiceInfo | 擷取服務資訊。 |
dlf:GetRoles | 擷取資料許可權中角色資訊。 |
dlf:CheckPermissions | 資料許可權校正。 |
重要 請謹慎編輯和刪除預設角色AliyunEmrEcsDefaultRole,否則會造成叢集建立失敗或作業運行失敗。
支援MetaService的資料來源
目前在E-MapReduce上支援MetaService的產品有OSS、LogService和MNS。您可以在E-MapReduce叢集上使用E-MapReduce SDK介面免AccessKey讀寫上述資料來源。
MetaService預設只有OSS的讀寫權限,如果您希望MetaService支援LogService和MNS,請前往RAM控制台為AliyunEmrEcsDefaultRole應用角色增加LogService和MNS的讀寫權限,RAM控制台連結為RAM控制台。
RAM角色授權,詳情請參見為RAM角色授權。
使用MetaService
基於MetaService服務,您可通過E-MapReduce作業免AccessKey訪問阿里雲資源(OSS、LogService和MNS),其優勢如下:
- 降低AccessKey泄漏的風險。基於RAM,您可按最小夠用原則給角色授權,做到許可權最小化,這樣可以將安全風險降到最低。
- 提高使用者體驗。尤其在互動式訪問OSS資源時,可避免讓您輸入一長串的OSS路徑。
- EMR內建服務
EMR內建服務中啟動並執行作業均可以自動基於MetaSerivce服務免明文AccessKey訪問阿里雲資源(OSS、LogService和MNS)
以下是使用MetaService(新)和不使用MetaService(舊)的對比樣本:- 通過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
- 舊方式
- 通過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';
- 舊方式
- 使用Spark查看OSS資料
- 舊方式
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")
- 舊方式
- 通過Hadoop命令列查看OSS資料
- 自行部署服務MetaService是一個HTTP服務,您可以直接存取這個HTTP服務的URL擷取STS臨時憑證,然後在自行搭建的系統中使用該STS臨時憑證免AccessKey訪問阿里雲資源。重要 STS臨時憑證失效前半小時會產生新的STS臨時憑證,在這半小時內,新舊STS臨時憑證均可使用。
例如,通過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