Este tópico descreve as interfaces de programação MapReduce compatíveis com o MaxCompute e suas restrições de uso.
O MaxCompute oferece duas interfaces de programação MapReduce:
MaxCompute MapReduce: interface nativa do MaxCompute que proporciona execução rápida, desenvolvimento ágil e não expõe o sistema de arquivos.
MaxCompute Extended MapReduce (MR2): suporta lógica de agendamento de tarefas mais complexa, com implementação consistente com a interface nativa do MaxCompute. Em comparação ao MapReduce tradicional, o modelo Extended MapReduce do MaxCompute (MR2) altera os modelos subjacentes de agendamento e E/S, evitando operações redundantes de E/S durante a execução das tarefas.
Essas versões são basicamente consistentes em aspectos como Termos, Envio de tarefas, Entradas e saídas e Uso de recursos. A principal diferença reside no Java SDK de cada versão. Para mais detalhes, consulte o Tutorial de Hadoop Map/Reduce.
O MapReduce não permite ler ou gravar dados em tabelas externas.
MapReduce
Cenários de aplicação
O MapReduce suporta os seguintes cenários:
Pesquisa: rastreamento web, índice invertido e PageRank.
-
Análise de logs de acesso web:
Análise e mineração de características de acesso e comportamento de compra dos usuários na web para viabilizar recomendações personalizadas.
Análise do comportamento de acesso dos usuários.
-
Análise estatística de texto:
Contagem de palavras (WordCount) em romances populares e análise de frequência de termos TF-IDF.
Análise de citações e estatísticas de artigos acadêmicos e literatura de patentes.
Análise de dados da Wikipédia.
Mineração de dados em massa: dados não estruturados, dados espaço-temporais e imagens.
Aprendizado de máquina: aprendizado supervisionado, não supervisionado e algoritmos de classificação (como árvores de decisão e SVM).
-
Processamento de linguagem natural:
Treinamento e previsão baseados em big data.
Construção de matrizes de coocorrência de palavras baseadas em corpus, mineração de conjuntos de itens frequentes e detecção de documentos duplicados.
Recomendação de anúncios: previsão de taxa de cliques (CTR) e comportamento de compra (CVR) dos usuários.
Fluxo do MapReduce
O processamento de dados no MapReduce divide-se principalmente nas fases Map e Reduce. A fase Map executa primeiro, seguida pela fase Reduce. Embora a lógica de processamento de ambas seja definida pelo usuário, ela deve seguir as convenções do framework MapReduce. O fluxo completo de processamento de dados é descrito abaixo:
Dados de entrada: antes da execução formal do Map, os dados de entrada passam por particionamento (divisão em blocos de tamanho igual). Os dados de cada partição servem como entrada para um único Map Worker, permitindo que múltiplos Map Workers operem simultaneamente.
-
Fase Map: cada Map Worker lê os dados, realiza o processamento computacional e atribui uma chave (Key) a cada registro de saída. Essa chave determina para qual Reduce Worker o dado será enviado.
NotaExiste uma relação de muitos-para-um entre valores de Key e Reduce Workers. Dados com a mesma Key são enviados ao mesmo Reduce Worker, enquanto um único Reduce Worker pode receber dados de múltiplas Keys.
Fase Shuffle: antes de entrar na fase Reduce, o framework MapReduce ordena os dados pelos valores de Key, agrupando registros com a mesma Key. Se você especificar uma Operação de combinação (Combiner), o framework invocará o Combiner para agregar dados com a mesma Key. Você pode implementar a lógica do Combiner conforme necessário. Diferentemente do protocolo clássico do framework MapReduce, no MaxCompute os parâmetros de entrada e saída do Combiner devem ser idênticos aos do Reduce. Esse processo também é conhecido como Embaralhamento (Shuffle).
Fase Reduce: dados com a mesma Key são transmitidos ao mesmo Reduce Worker. Um único Reduce Worker recebe dados de vários Map Workers e executa operações de redução sobre os registros agrupados por Key. Ao final, múltiplos registros de uma mesma Key são consolidados em um único valor após a operação de Reduce.
Saída dos dados resultantes.
Esta seção apresenta apenas uma visão geral do framework MapReduce. Para mais detalhes, consulte a Visão geral dos recursos.
O exemplo a seguir utiliza o WordCount para ilustrar os conceitos de cada fase do MaxCompute MapReduce.
Considere um arquivo de texto chamado a.txt, onde cada linha contém um número. O objetivo é contar quantas vezes cada número aparece. No contexto deste exemplo, os números são chamados de Word e a contagem de ocorrências é chamada de Count. Para realizar essa tarefa com o MaxCompute MapReduce, o sistema segue o fluxo ilustrado na figura abaixo.
Procedimento
Dados de entrada: particione o texto e utilize os dados de cada partição como entrada para um único Map Worker.
Fase Map: ao processar a entrada, para cada número obtido, defina o Count como 1 e gere um par <Word, Count>. Neste caso, o Word atua como a Key dos dados de saída.
Shuffle > Classificação e combinação: no início da fase Shuffle, ordene a saída de cada Map Worker pelo valor da Key (ou seja, o valor do Word). Após a ordenação, execute a operação Combiner, que soma os valores de Count para Keys (Words) idênticas, gerando um novo par <Word, Count>. Esse processo é denominado classificação e combinação.
Shuffle > Distribuição para Reduce: na etapa final do Shuffle, os dados são enviados aos Reducers. Ao receber os dados, o Reduce Worker reordena-os com base nos valores de Key.
Fase Reduce: durante o processamento, cada Reduce Worker aplica a mesma lógica do Combiner, acumulando os valores de Count para Keys (Words) iguais e produzindo o resultado final.
Saída dos dados resultantes.
Como todos os dados do MaxCompute residem em tabelas, as entradas e saídas do MaxCompute MapReduce restringem-se exclusivamente a tabelas. Não é permitido definir formatos de saída personalizados nem utilizar interfaces semelhantes às de sistemas de arquivos.
Restrições de uso
Para consultar as restrições de uso do MapReduce, veja o Resumo de limites de uso.
Sobre as limitações para execução local do MapReduce, consulte a seção Execução local.
Extended MapReduce (MR2)
A escrita de funções como Map e Reduce no MR2 segue essencialmente o mesmo padrão do MaxCompute MapReduce tradicional. As diferenças mais significativas ocorrem durante a execução da tarefa. Consulte os Exemplos de pipeline para mais informações.
Contexto do modelo MR2
No modelo tradicional de MapReduce, os resultados obtidos após cada rodada de operações devem ser persistidos em um sistema de arquivos distribuído (como HDFS ou tabelas de dados do MaxCompute). Como esse modelo geralmente envolve múltiplas tarefas encadeadas, cada conclusão de tarefa exige gravação em disco. Contudo, se a tarefa Map subsequente precisar ler esses dados apenas uma vez para preparar a próxima fase Shuffle, surgem operações redundantes de E/S em disco.
A lógica de agendamento computacional do MaxCompute suporta modelos de programação mais complexos. Para resolver o problema mencionado, é possível executar diretamente a próxima operação Reduce após a atual, sem inserir uma operação Map intermediária. Por isso, o MaxCompute introduziu o modelo Extended MapReduce, que permite encadear qualquer quantidade de operações Reduce após um Map, formando fluxos como Map > Reduce > Reduce.
Comparação com Hadoop Chain Mapper/Reducer
Embora o Hadoop Chain Mapper/Reducer também suporte operações seriadas de Map ou Reduce, ele difere fundamentalmente do modelo Extended MapReduce (MR2) do MaxCompute.
Baseado no modelo tradicional de MapReduce, o Chain Mapper/Reducer permite adicionar uma ou mais operações Mapper após um Mapper ou Reducer existente, mas proíbe a adição de Reducers extras. A vantagem dessa abordagem é a possibilidade de reutilizar lógicas de negócio de Mappers anteriores, dividindo um Map ou Reduce em várias etapas de Mapper. No entanto, isso não altera os modelos subjacentes de agendamento e E/S.