O E-MapReduce (EMR) vincula automaticamente uma função de aplicação ECS chamada MetaService a cada cluster criado. Jobs e aplicações em execução no cluster usam essa função para acessar recursos da Alibaba Cloud sem exigir um par de AccessKey nos arquivos de configuração ou no código, o que elimina o risco de exposição de credenciais.
O MetaService permite acesso aos seguintes service sem um par de 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 ative 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 Grant permissions to a RAM role.
Pré-requisitos
Antes de começar, verifique se você já:
Autorizou a função. Para mais informações, consulte Assign roles to an Alibaba Cloud account
Como o MetaService funciona
Quando um job ou aplicação chama um service compatível da Alibaba Cloud, o MetaService fornece uma credencial temporária do Security Token Service (STS) em segundo plano. Assim, não é necessário incluir um par de AccessKey no código ou na configuração.
Rotação de credenciais STS: O sistema gera uma nova credencial temporária do STS 30 minutos antes da expiração 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 listadas abaixo.
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 |
Lista buckets |
|
oss:AbortMultipartUpload |
Cancela 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 schema especificado |
|
ots:DeleteTable |
Exclui 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 |
Atualiza dados em uma linha específica |
|
ots:DeleteRow |
Exclui uma linha de dados |
|
ots:GetRange |
Lê dados dentro de um intervalo de valores específico da chave primária |
|
ots:BatchWriteRow |
Insira, modifica ou exclui 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 informações sobre 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 obtém o ID da 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 múltiplas partições simultaneamente |
|
dlf:BatchCreateTables |
Crie múltiplas tabelas simultaneamente |
|
dlf:BatchDeletePartitions |
Exclui múltiplas partições simultaneamente |
|
dlf:BatchDeleteTables |
Exclui múltiplas tabelas simultaneamente |
|
dlf:BatchGetPartitions |
Consulta informações de múltiplas partições simultaneamente |
|
dlf:BatchGetTables |
Consulta informações de múltiplas tabelas simultaneamente |
|
dlf:BatchUpdatePartitions |
Atualiza múltiplas partições simultaneamente |
|
dlf:BatchUpdateTables |
Atualiza múltiplas 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 |
Exclui um banco de dados |
|
dlf:DeleteFunction |
Exclui uma função |
|
dlf:DeletePartition |
Exclui uma partição |
|
dlf:DeleteTable |
Exclui 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 |
Atualiza um banco de dados |
|
dlf:UpdateFunction |
Atualiza uma função |
|
dlf:UpdateTable |
Atualiza uma tabela |
|
dlf:UpdateTableColumnStatistics |
Atualiza as estatísticas de uma tabela de metadados |
|
dlf:GetTableColumnStatistics |
Consulta as estatísticas de uma tabela de metadados |
|
dlf:DeleteTableColumnStatistics |
Exclui as estatísticas de uma tabela de metadados |
|
dlf:UpdatePartitionColumnStatistics |
Atualiza as estatísticas de uma partição |
|
dlf:GetPartitionColumnStatistics |
Consulta as estatísticas de uma partição |
|
dlf:DeletePartitionColumnStatistics |
Exclui as estatísticas de uma partição |
|
dlf:BatchGetPartitionColumnStatistics |
Consulta as estatísticas de múltiplas 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 |
Renova 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 service |
|
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 para sua carga de trabalho:
|
Cenário |
Abordagem |
Benefício |
|
Jobs em execução 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 do STS para OSS, Log Service e MNS |
Acesso ao 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, dispensando a inclusão de 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 — crie 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")
Obtenção de credenciais STS em serviços autogerenciados
O MetaService expõe uma API HTTP em http://localhost:10011 em cada nó do cluster. Chame esses endpoints para obter a credencial temporária do STS necessária para que sua aplicação acesse recursos da Alibaba Cloud sem um par de 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.