E-MapReduce (EMR) secara otomatis mengikat peran aplikasi ECS bernama MetaService ke setiap kluster yang Anda buat. Pekerjaan dan aplikasi yang berjalan di kluster menggunakan peran ini untuk mengakses sumber daya Alibaba Cloud—tanpa memerlukan pasangan AccessKey dalam file konfigurasi atau kode, sehingga menghilangkan risiko eksposur kredensial.
MetaService mendukung akses ke layanan berikut tanpa pasangan AccessKey:
| Layanan | Diaktifkan secara default |
|---|---|
| Object Storage Service (OSS) | Ya |
| Log Service | Tidak — memerlukan izin RAM tambahan |
| Message Service (MNS) | Tidak — memerlukan izin RAM tambahan |
Untuk mengaktifkan akses Log Service atau MNS, berikan izin yang diperlukan ke peran AliyunEmrEcsDefaultRole di Konsol RAM. Untuk informasi selengkapnya, lihat Berikan izin ke peran RAM.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Mengotorisasi peran tersebut. Untuk informasi selengkapnya, lihat Menetapkan peran ke Akun Alibaba Cloud.
Cara kerja MetaService
Saat pekerjaan atau aplikasi memanggil layanan Alibaba Cloud yang didukung, MetaService menyediakan kredensial sementara dari Security Token Service (STS) di latar belakang. Anda tidak perlu menyertakan pasangan AccessKey dalam kode atau konfigurasi.
Rotasi kredensial STS: Kredensial sementara STS baru dihasilkan 30 menit sebelum kredensial saat ini kedaluwarsa. Kedua kredensial tetap valid selama jendela tumpang tindih 30 menit tersebut.
Izin default
Peran AliyunEmrEcsDefaultRole dikonfigurasi dengan kebijakan AliyunEmrECSRolePolicy, yang memberikan izin berikut.
Izin OSS
| Izin (Aksi) | Deskripsi |
|---|---|
| oss:PutObject | Mengunggah file atau folder |
| oss:GetObject | Mengambil informasi tentang file atau folder |
| oss:ListObjects | Mengambil daftar file |
| oss:DeleteObject | Menghapus file |
| oss:ListBuckets | Mengambil daftar bucket |
| oss:AbortMultipartUpload | Menghentikan event unggah multi-bagian |
| oss:ListMultipartUploads | Mengambil daftar semua event unggah multi-bagian yang sedang berlangsung |
| oss:RestoreObject | Memulihkan objek Archive atau Cold Archive |
| oss:GetBucketInfo | Mengambil informasi tentang bucket |
| oss:ListObjectVersions | Mengambil versi semua objek dalam bucket, termasuk penanda hapus |
| oss:DeleteObjectVersion | Menghapus versi tertentu dari suatu objek |
| oss:PostDataLakeStorageFileOperation | Mengakses OSS-HDFS |
Izin Tablestore
| Izin (Aksi) | Deskripsi |
|---|---|
| ots:CreateTable | Membuat tabel berdasarkan skema tabel yang ditentukan |
| ots:DeleteTable | Menghapus tabel tertentu dari instans saat ini |
| ots:GetRow | Membaca data dalam satu baris berdasarkan kunci primer tertentu |
| ots:PutRow | Memasukkan data ke baris tertentu |
| ots:UpdateRow | Memperbarui data dalam baris tertentu |
| ots:DeleteRow | Menghapus satu baris data |
| ots:GetRange | Membaca data dalam rentang nilai tertentu dari kunci primer |
| ots:BatchWriteRow | Memasukkan, memodifikasi, atau menghapus beberapa baris data dari satu atau beberapa tabel sekaligus |
| ots:BatchGetRow | Membaca beberapa baris data dari satu atau beberapa tabel sekaligus |
| ots:ComputeSplitPointsBySize | Memisahkan data dalam tabel secara logis menjadi beberapa shard dengan ukuran mendekati ukuran yang ditentukan, serta mengembalikan titik pemisahan antar shard dan prompt tentang host tempat partisi berada |
| ots:StartLocalTransaction | Membuat transaksi lokal berdasarkan nilai kunci partisi yang ditentukan dan mengambil ID transaksi lokal tersebut |
| ots:CommitTransaction | Melakukan commit transaksi lokal |
| ots:AbortTransaction | Membatalkan transaksi lokal |
Izin Data Lake Formation (DLF)
| Izin (Aksi) | Deskripsi |
|---|---|
| dlf:BatchCreatePartitions | Membuat beberapa partisi sekaligus |
| dlf:BatchCreateTables | Membuat beberapa tabel sekaligus |
| dlf:BatchDeletePartitions | Menghapus beberapa partisi sekaligus |
| dlf:BatchDeleteTables | Menghapus beberapa tabel sekaligus |
| dlf:BatchGetPartitions | Mengambil informasi tentang beberapa partisi sekaligus |
| dlf:BatchGetTables | Mengambil informasi tentang beberapa tabel sekaligus |
| dlf:BatchUpdatePartitions | Memperbarui beberapa partisi sekaligus |
| dlf:BatchUpdateTables | Memperbarui beberapa tabel sekaligus |
| dlf:CreateDatabase | Membuat database |
| dlf:CreateFunction | Membuat fungsi |
| dlf:CreatePartition | Membuat partisi |
| dlf:CreateTable | Membuat tabel |
| dlf:DeleteDatabase | Menghapus database |
| dlf:DeleteFunction | Menghapus fungsi |
| dlf:DeletePartition | Menghapus partisi |
| dlf:DeleteTable | Menghapus tabel |
| dlf:GetDatabase | Mengambil informasi tentang database |
| dlf:GetFunction | Mengambil informasi tentang fungsi |
| dlf:GetPartition | Mengambil informasi tentang partisi |
| dlf:GetTable | Mengambil informasi tentang tabel |
| dlf:ListCatalogs | Mengambil daftar katalog |
| dlf:ListDatabases | Menjalankan kueri database |
| dlf:ListFunctionNames | Mengambil daftar nama fungsi |
| dlf:ListFunctions | Fungsi Query |
| dlf:ListPartitionNames | Mengambil daftar nama partisi |
| dlf:ListPartitions | Mengambil daftar partisi |
| dlf:ListPartitionsByExpr | Mengambil partisi tabel metadata berdasarkan kondisi |
| dlf:ListPartitionsByFilter | Mengambil partisi tabel metadata berdasarkan kondisi |
| dlf:ListTableNames | Mengambil daftar nama tabel |
| dlf:ListTables | Mengambil daftar tabel |
| dlf:RenamePartition | Mengganti nama partisi |
| dlf:RenameTable | Mengganti nama tabel |
| dlf:UpdateDatabase | Memperbarui database |
| dlf:UpdateFunction | Memperbarui fungsi |
| dlf:UpdateTable | Memperbarui tabel |
| dlf:UpdateTableColumnStatistics | Memperbarui statistik tabel metadata |
| dlf:GetTableColumnStatistics | Mengambil statistik tabel metadata |
| dlf:DeleteTableColumnStatistics | Menghapus statistik tabel metadata |
| dlf:UpdatePartitionColumnStatistics | Memperbarui statistik partisi |
| dlf:GetPartitionColumnStatistics | Mengambil statistik partisi |
| dlf:DeletePartitionColumnStatistics | Menghapus statistik partisi |
| dlf:BatchGetPartitionColumnStatistics | Mengambil statistik beberapa partisi sekaligus |
| dlf:CreateLock | Membuat kunci metadata |
| dlf:UnLock | Membuka kunci metadata tertentu |
| dlf:AbortLock | Membatalkan kunci metadata |
| dlf:RefreshLock | Memperbarui kunci metadata |
| dlf:GetLock | Mengambil informasi tentang kunci metadata |
| dlf:GetAsyncTaskStatus | Mengambil status tugas asinkron |
| dlf:DeltaGetPermissions | Kueri izin |
| dlf:GetPermissions | Mengambil informasi tentang izin data |
| dlf:GetServiceInfo | Mengambil informasi tentang layanan |
| dlf:GetRoles | Mengambil informasi tentang role dalam izin data |
| dlf:CheckPermissions | Memverifikasi izin data |
Menggunakan MetaService
Pilih pendekatan yang sesuai dengan workload Anda:
| Skenario | Pendekatan | Yang Anda Dapatkan |
|---|---|---|
| Pekerjaan yang berjalan di kluster (Hadoop, Hive, Spark) | Gunakan path OSS yang disederhanakan | Akses OSS tanpa kredensial dalam path |
| Layanan yang dikelola sendiri atau aplikasi kustom | Panggil API HTTP MetaService | Kredensial sementara STS untuk OSS, Log Service, dan MNS |
Akses OSS dari pekerjaan kluster
Saat MetaService aktif, gunakan format path yang disederhanakan dalam pekerjaan kluster apa pun:
oss://<bucket-name>/<object-path>
MetaService menangani otentikasi secara otomatis. Anda tidak perlu menyematkan kredensial dalam path, sehingga path OSS yang digunakan menjadi lebih pendek dan pengalaman interaksi dengan sumber daya OSS lebih lancar.
Hadoop — daftar objek:
# Tanpa MetaService (kredensial disematkan dalam path)
hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
# Dengan MetaService (path disederhanakan)
hadoop fs -ls oss://bucket/a/b/c
Hive — buat tabel eksternal yang didukung oleh OSS:
-- Tanpa MetaService (kredensial disematkan dalam path)
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';
-- Dengan MetaService (path disederhanakan)
CREATE EXTERNAL TABLE test_table(id INT, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'
LOCATION 'oss://bucket/a/b/c';
Spark — baca data OSS:
// Tanpa MetaService (kredensial disematkan dalam path)
val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
// Dengan MetaService (path disederhanakan)
val data = sc.textFile("oss://bucket/a/b/c")
Dapatkan kredensial STS dari layanan yang dikelola sendiri
MetaService menyediakan API HTTP di http://localhost:10011 pada setiap node kluster. Panggil endpoint-endpoint ini untuk mengambil kredensial sementara STS yang dibutuhkan aplikasi Anda guna mengakses sumber daya Alibaba Cloud tanpa pasangan AccessKey.
Contoh — dapatkan wilayah kluster:
curl http://localhost:10011/cluster-region
Endpoint yang tersedia:
| Endpoint | Nilai Kembali |
|---|---|
/cluster-region |
Wilayah tempat kluster berada |
/cluster-role-name |
Nama Peran |
/role-access-key-id |
ID AccessKey dari kredensial STS |
/role-access-key-secret |
Rahasia AccessKey dari kredensial STS |
/role-security-token |
Token keamanan dari kredensial STS |
/cluster-network-type |
Jenis jaringan |
Catatan penggunaan
Ubah atau hapus peran AliyunEmrEcsDefaultRole dengan hati-hati. Menghapus atau salah mengonfigurasi peran ini dapat menyebabkan kegagalan pembuatan kluster dan kegagalan pekerjaan. Untuk meminimalkan risiko keamanan, ikuti prinsip hak istimewa minimal saat mengonfigurasi izin di Konsol RAM.