O E-MapReduce (EMR) vincula automaticamente uma função de aplicação ECS chamada MetaService a todo cluster criado. Jobs e aplicações em execução no cluster usam essa função para acessar recursos da Alibaba Cloud sem exigir pares AccessKey em arquivos de configuração ou código, o que elimina o risco de exposição de credenciais.
O MetaService permite acesso aos seguintes serviços sem par AccessKey:
|
Serviço |
Ativado por padrão |
|
Object Storage Service (OSS) |
Sim |
|
Log Service |
Não — requer permissões adicionais do RAM |
|
Message Service (MNS) |
Não — requer permissões adicionais do RAM |
Para ativar o acesso ao Log Service ou ao MNS, conceda as permissões necessárias à função AliyunEmrEcsDefaultRole no console do RAM. Para mais informações, consulte Conceder permissões a uma função do RAM.
Pré-requisitos
Antes de começar, verifique se você já:
Autorizou a função. Para mais informações, consulte Atribuir funções a uma conta Alibaba Cloud
Como o MetaService funciona
Quando um job ou aplicação chama um serviço compatível da Alibaba Cloud, o MetaService fornece internamente uma credencial temporária do Security Token Service (STS). Assim, não é necessário incluir pares AccessKey no código ou nas configurações.
Rotação de credenciais STS: O sistema gera uma nova credencial temporária STS 30 minutos antes do vencimento da atual. Ambas as credenciais permanecem válidas durante essa janela de sobreposição de 30 minutos.
Permissões padrão
A função AliyunEmrEcsDefaultRole vem configurada com a política AliyunEmrECSRolePolicy, que concede as permissões a seguir.
Permissões do OSS
|
Permissão (Action) |
Descrição |
|
oss:PutObject |
Faz upload de um arquivo ou pasta |
|
oss:GetObject |
Consulta um arquivo ou pasta |
|
oss:ListObjects |
Lista arquivos |
|
oss:DeleteObject |
Exclui um arquivo |
|
oss:ListBuckets |
Consulta buckets |
|
oss:AbortMultipartUpload |
Interrompe um evento de upload multipart |
|
oss:ListMultipartUploads |
Lista todos os eventos de upload multipart em andamento |
|
oss:RestoreObject |
Restaura um objeto Archive ou Cold Archive |
|
oss:GetBucketInfo |
Obtém informações sobre um bucket |
|
oss:ListObjectVersions |
Lista as versões de todos os objetos em um bucket, incluindo marcadores de exclusão |
|
oss:DeleteObjectVersion |
Exclui uma versão específica de um objeto |
|
oss:PostDataLakeStorageFileOperation |
Acessa o OSS-HDFS |
Permissões do Tablestore
|
Permissão (Action) |
Descrição |
|
ots:CreateTable |
Crie uma tabela com base no esquema especificado |
|
ots:DeleteTable |
Exclua uma tabela específica da instância atual |
|
ots:GetRow |
Lê dados de uma única linha com base em uma chave primária específica |
|
ots:PutRow |
Insira dados em uma linha específica |
|
ots:UpdateRow |
Atualize dados em uma linha específica |
|
ots:DeleteRow |
Exclua uma linha de dados |
|
ots:GetRange |
Lê dados dentro de um intervalo de valores da chave primária |
|
ots:BatchWriteRow |
Insira, modifique ou exclua várias linhas de dados de uma ou mais tabelas simultaneamente |
|
ots:BatchGetRow |
Lê várias linhas de dados de uma ou mais tabelas simultaneamente |
|
ots:ComputeSplitPointsBySize |
Divide logicamente os dados de uma tabela em vários shards com tamanhos próximos ao especificado e retorna os pontos de divisão entre os shards, além de indicar os hosts onde as partições residem |
|
ots:StartLocalTransaction |
Inicia uma transação local com base em um valor de chave de partição especificado e retorna o ID dessa transação |
|
ots:CommitTransaction |
Confirma uma transação local |
|
ots:AbortTransaction |
Cancela uma transação local |
Permissões do Data Lake Formation (DLF)
|
Permissão (Action) |
Descrição |
|
dlf:BatchCreatePartitions |
Crie várias partições simultaneamente |
|
dlf:BatchCreateTables |
Crie várias tabelas simultaneamente |
|
dlf:BatchDeletePartitions |
Exclua várias partições simultaneamente |
|
dlf:BatchDeleteTables |
Exclua várias tabelas simultaneamente |
|
dlf:BatchGetPartitions |
Consulta informações de várias partições simultaneamente |
|
dlf:BatchGetTables |
Consulta informações de várias tabelas simultaneamente |
|
dlf:BatchUpdatePartitions |
Atualize várias partições simultaneamente |
|
dlf:BatchUpdateTables |
Atualize várias tabelas simultaneamente |
|
dlf:CreateDatabase |
Crie um banco de dados |
|
dlf:CreateFunction |
Crie uma função |
|
dlf:CreatePartition |
Crie uma partição |
|
dlf:CreateTable |
Crie uma tabela |
|
dlf:DeleteDatabase |
Exclua um banco de dados |
|
dlf:DeleteFunction |
Exclua uma função |
|
dlf:DeletePartition |
Exclua uma partição |
|
dlf:DeleteTable |
Exclua uma tabela |
|
dlf:GetDatabase |
Consulta informações sobre um banco de dados |
|
dlf:GetFunction |
Consulta informações sobre uma função |
|
dlf:GetPartition |
Consulta informações sobre uma partição |
|
dlf:GetTable |
Consulta informações sobre uma tabela |
|
dlf:ListCatalogs |
Lista catálogos |
|
dlf:ListDatabases |
Lista bancos de dados |
|
dlf:ListFunctionNames |
Lista os nomes das funções |
|
dlf:ListFunctions |
Lista funções |
|
dlf:ListPartitionNames |
Lista os nomes das partições |
|
dlf:ListPartitions |
Lista partições |
|
dlf:ListPartitionsByExpr |
Consulta partições de tabelas de metadados por condições |
|
dlf:ListPartitionsByFilter |
Consulta partições de tabelas de metadados por filtros |
|
dlf:ListTableNames |
Lista os nomes das tabelas |
|
dlf:ListTables |
Lista tabelas |
|
dlf:RenamePartition |
Renomeia uma partição |
|
dlf:RenameTable |
Renomeia uma tabela |
|
dlf:UpdateDatabase |
Atualize um banco de dados |
|
dlf:UpdateFunction |
Atualize uma função |
|
dlf:UpdateTable |
Atualize uma tabela |
|
dlf:UpdateTableColumnStatistics |
Atualize as estatísticas de uma tabela de metadados |
|
dlf:GetTableColumnStatistics |
Consulta as estatísticas de uma tabela de metadados |
|
dlf:DeleteTableColumnStatistics |
Exclua as estatísticas de uma tabela de metadados |
|
dlf:UpdatePartitionColumnStatistics |
Atualize as estatísticas de uma partição |
|
dlf:GetPartitionColumnStatistics |
Consulta as estatísticas de uma partição |
|
dlf:DeletePartitionColumnStatistics |
Exclua as estatísticas de uma partição |
|
dlf:BatchGetPartitionColumnStatistics |
Consulta estatísticas de várias partições simultaneamente |
|
dlf:CreateLock |
Crie um bloqueio de metadados |
|
dlf:UnLock |
Desbloqueia um bloqueio de metadados específico |
|
dlf:AbortLock |
Cancela um bloqueio de metadados |
|
dlf:RefreshLock |
Atualize um bloqueio de metadados |
|
dlf:GetLock |
Consulta informações sobre um bloqueio de metadados |
|
dlf:GetAsyncTaskStatus |
Consulta o status de uma tarefa assíncrona |
|
dlf:DeltaGetPermissions |
Consulta permissões |
|
dlf:GetPermissions |
Consulta informações sobre permissões de dados |
|
dlf:GetServiceInfo |
Consulta informações sobre um serviço |
|
dlf:GetRoles |
Consulta informações sobre funções nas permissões de dados |
|
dlf:CheckPermissions |
Verifica permissões de dados |
Uso do MetaService
Escolha a abordagem adequada à sua carga de trabalho:
|
Cenário |
Abordagem |
Benefício |
|
Jobs executados no cluster (Hadoop, Hive, Spark) |
Use caminhos simplificados do OSS |
Acesse o OSS sem credenciais no caminho |
|
Serviços autogerenciados ou aplicações personalizadas |
Chame a API HTTP do MetaService |
Obtenha credenciais temporárias STS para OSS, Log Service e MNS |
Acessar o OSS a partir de jobs do cluster
Com o MetaService ativo, use o formato de caminho simplificado em qualquer job do cluster:
oss://<bucket-name>/<object-path>
O MetaService gerencia a autenticação automaticamente. Não é necessário incorporar credenciais no caminho. Isso também melhora a experiência de interação com recursos do OSS, pois o caminho a ser inserido torna-se significativamente mais curto.
Hadoop — listar objetos:
# Without MetaService (credentials embedded in path)
hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
# With MetaService (simplified path)
hadoop fs -ls oss://bucket/a/b/c
Hive — criar uma tabela externa baseada no OSS:
-- Without MetaService (credentials embedded in 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';
-- With MetaService (simplified path)
CREATE EXTERNAL TABLE test_table(id INT, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'
LOCATION 'oss://bucket/a/b/c';
Spark — ler dados do OSS:
// Without MetaService (credentials embedded in path)
val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
// With MetaService (simplified path)
val data = sc.textFile("oss://bucket/a/b/c")
Obter credenciais STS de serviços autogerenciados
O MetaService expõe uma API HTTP em http://localhost:10011 em cada nó do cluster. Chame esses endpoints para recuperar a credencial temporária STS necessária para que sua aplicação acesse recursos da Alibaba Cloud sem par AccessKey.
Exemplo — obter a região do cluster:
curl http://localhost:10011/cluster-region
Endpoints disponíveis:
|
Endpoint |
Retorno |
|
|
Região onde o cluster está localizado |
|
|
Nome da função |
|
|
AccessKey ID da credencial STS |
|
|
AccessKey secret da credencial STS |
|
|
Token de segurança da credencial STS |
|
|
Tipo de rede |
Observações de uso
Modifique ou exclua a função AliyunEmrEcsDefaultRole com cautela. A exclusão ou configuração incorreta dessa função causa falhas na criação de clusters e na execução de jobs. Para minimizar riscos de segurança, siga o princípio do menor privilégio ao configurar permissões no console do RAM.