Planejamento no Hadoop

Uma introdução à estrutura do planejador conectável

O Hadoop implementa a capacidade para planejadores conectáveis que designam recursos a tarefas. No entanto, como sabemos por meio do planejamento tradicional, nem todos os algoritmos são os mesmos, e a eficiência depende da carga de trabalho e cluster. Conheça o planejamento do Hadoop e explore dois algoritmos já disponíveis: planejamento justo e planejamento de capacidade. Além disso, saiba como esses algoritmos são ajustados e em quais cenários eles são relevantes.

M. Tim Jones, Consultant Engineer, 独立作家

M. Tim JonesM. Tim Jones é arquiteto de firmware integrado e autor das obras Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (agora, na segunda edição), AI Application Programming (na segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua experiência em engenharia vai desde o desenvolvimento de kernels para espaçonaves geossíncronas até a arquitetura de sistemas integrados e o desenvolvimento de protocolos de rede. Tim é engenheiro consultor da Emulex Corp. em Longmont, Colorado.



22/Dez/2011

O Hadoop é um sistema de propósito geral que permite o processamento de dados de alto desempenho sobre um conjunto de nós distribuídos. Contudo, dentro dessa definição está o fato de que o Hadoop é um sistema multitarefas que pode processar ao mesmo tempo vários conjuntos de dados para diversas tarefas de diferentes usuários. Esse recurso de multiprocessamento significa que o Hadoop tem a oportunidade de mapear tarefas de forma mais eficiente para recursos de um modo que otimize seu uso.

Até 2008, o Hadoop suportava um único planejador que era combinado com a lógica do JobTracker. Embora essa implementação fosse perfeita para as tarefas em lote tradicionais do Hadoop (como mineração de log e indexação da web), a implementação era inflexível e não admitia padronização. Adicionalmente, o Hadoop operava no modo em lote, no qual as tarefas eram submetidas para uma fila e a infraestrutura do Hadoop simplesmente as executava pela ordem do recebimento.

Felizmente, um relatório de erros (HADOOP-3412) era submetido de uma implementação de planejador que era independente do JobTracker. O importante é ressaltar que o novo planejador é conectável, o que permite o uso de novos algoritmos de planejamento para ajudar a otimizar tarefas com características específicas. Uma vantagem adicional dessa mudança é o aumento da capacidade de leitura do planejador, que permitiu uma maior experimentação e o potencial de uma lista crescente de planejadores a se especializarem na lista sempre crescente de aplicativos do Hadoop.

Com essa mudança, o Hadoop é agora um armazém de dados multiusuários que suporta uma variedade de tipos diferentes de tarefas de processamento, com uma estrutura de planejador conectável que fornece maior controle. Essa estrutura permite o uso mais adequado de um cluster Hadoop por um conjunto variado de cargas de trabalho (de tarefas pequenas a grandes, e tudo nesse entremeio). A movimentação além do planejamento FIFO (que trata da importância relativa de uma tarefa no momento da submissão) permite que um cluster Hadoop suporte uma variedade de cargas de trabalho com variação de prioridade e restrições de desempenho.

Observação: Este artigo pressupõe algum conhecimento de Hadoop. Consulte Recursos para obter os links para uma introdução à arquitetura do Hadoop e à série prática do Hadoop para instalação, configuração e composição de aplicativos Hadoop.

A arquitetura principal do Hadoop

Um cluster do Hadoop é composto por uma arquitetura relativamente simples de mestres e escravos (consulte Figura 1). O NameNode é o mestre geral de um cluster do Hadoop e é o responsável pelo namespace do sistema de arquivos e pelo controle de acesso dos clientes. Também existe um JobTracker, cuja tarefa é distribuir tarefas para nós de espera. Essas duas entidades (NameNode e JobTracker) são os mestres da arquitetura do Hadoop. O escravo é composto pelo TaskTracker, que gerencia a execução da tarefa (incluindo o início e o monitoramento de tarefas, a captura das saídas e a notificação da conclusão da tarefa ao JobTracker). O DataNode é o nó de armazenamento em um cluster Hadoop e representa o sistema de arquivos distribuídos (ou, pelo menos, uma parte dele para vários DataNodes). O TaskTracker e o DataNode são os escravos dentro do cluster Hadoop.

Figura 1. Elementos de um cluster Hadoop
Elementos de um cluster Hadoop

Observe que o Hadoop é flexível e suporta tanto um cluster de nó único (quando todas as entidades existem em um único nó) quanto um cluster de vários nós (quando o JobTracker e o NameNodes estão distribuídos em milhares de nós). Embora haja poucas informações sobre os ambientes de produção maiores existentes, o maior cluster do Hadoop conhecido é o do Facebook, composto por 4.000 nós. Esses nós estão divididos em vários tamanhos (metade inclui CPUs de 8 e 16 núcleos). O cluster do Facebook também suporta 21PB de armazenamento distribuído em diversos DataNodes. Considerando o grande número de recursos e o potencial de diversas tarefas de numerosos usuários, o planejamento será uma otimização importante daqui para frente.


Planejadores do Hadoop

Desde que o planejador conectável foi implementado, vários algoritmos de planejadores foram desenvolvidos para ele. As seções que seguem exploram os diversos algoritmos disponíveis e quando é apropriado utilizá-los.

Planejador FIFO

O algoritmo de planejamento original integrado no JobTracker denominava-se FIFO. No planejamento FIFO, um JobTracker extraía tarefas de uma fila de trabalho começando pela mais antiga. Esse planejamento não tinha nenhum conceito de prioridade ou tamanho da tarefa, mas a abordagem era simples de implementar e eficiente.

Planejador justo

A ideia principal por trás do planejador de compartilhamento justo era designar recursos às tarefas de tal forma que, em média, ao longo do tempo, cada tarefa recebesse um compartilhamento igual dos recursos disponíveis. O resultado é que tarefas que necessitam de menos tempo de execução podem acessar a CPU e ser concluídas combinadas com as que necessitam de mais tempo. Esse comportamento permite alguma interatividade entre as tarefas do Hadoop e maior responsividade do cluster Hadoop para a variedade de tipos de tarefas submetidas. O planejador justo foi desenvolvido pelo Facebook.

A implementação do Hadoop cria um grupo de conjuntos no qual as tarefas são colocadas para serem selecionadas pelo planejador. Cada conjunto pode ser designado a um conjunto de compartilhamentos para balancear os recursos entre as tarefas nos conjuntos (mais compartilhamentos correspondem a maiores recursos a partir dos quais as tarefas são executadas). Por padrão, todos os conjuntos têm compartilhamentos iguais, mas a configuração permite fornecer mais ou menos compartilhamentos dependendo do tipo de tarefa. O número de tarefas ativas em determinado momento também pode ser restrito, se desejado, para minimizar o congestionamento e permitir que o trabalho termine de modo oportuno.

Para assegurar equidade, cada usuário é designado a um conjunto. Desse modo, se um usuário submeter muitas tarefas, ele poderá receber o mesmo compartilhamento de recursos de cluster que todos os outros usuários (independentemente do trabalho que eles submeteram). Sem levar em consideração os compartilhamentos designados aos conjuntos, se o sistema não estiver carregado, as tarefas receberão os compartilhamentos que, de outra forma, ficariam sem uso (divididos entre as tarefas disponíveis).

A implementação do planejador controla o tempo computado para cada tarefa no sistema. Periodicamente, o planejador inspeciona as tarefas para computar a diferença entre o tempo computado da tarefa recebida e o tempo que ela deveria ser recebida em um planejador ideal. O resultado determina o déficit da tarefa. A tarefa do planejador é assegurar que a tarefa com o déficit mais alto seja planejada a seguir.

Configure o compartilhamento justo no arquivo mapred-site.xml. Esse arquivo define as propriedades que controlam o comportamento do planejador de compartilhamento justo. Um arquivo XML —encaminhado com a propriedade mapred.fairscheduler.allocation.file— define a alocação de compartilhamentos a cada conjunto. Para otimizar o tamanho da tarefa, é possível configurar mapread.fairscheduler.sizebasedweight para designar compartilhamentos às tarefas em função do seu tamanho. Uma propriedade similar permite que tarefas mais inteligentes sejam concluídas mais rapidamente ajustando o peso da tarefa a cada 5 minutos (mapred.fairscheduler.weightadjuster). Há diversas outras propriedades que podem ser usadas para ajustar as cargas nos nós (por exemplo, o número de mapas e reduções que determinado TaskTracker pode gerenciar) e definir se a preempção deve ser executada. Consulte Recursos para obter um link para uma lista completa de propriedades configuráveis.

Planejador de capacidade

O planejador de capacidade apresenta diferenças distintas, mas também compartilha alguns dos princípios do planejador justo. Primeiro, o planejamento de capacidade foi definido para grandes clusters, que podem ter vários consumidores independentes e aplicativos de destino. Por esse motivo, o planejamento de capacidade fornece maior controle, além da capacidade de fornecer uma garantia de capacidade mínima e compartilhar capacidade excessiva entre usuários. O planejador de capacidade foi desenvolvido pelo Yahoo!.

No planejamento de capacidade, várias filas são criadas, ao invés de conjuntos, cada uma com um número configurável de mapas e slots de redução. Cada fila também é designada com uma capacidade garantida (ao passo que a capacidade geral do cluster é a soma da capacidade de cada fila).

As filas são monitoradas. Se uma fila não está consumindo sua capacidade alocada, essa capacidade em excesso pode ser temporariamente alocada a outras filas. Como tais filas podem representar uma pessoa ou uma organização maior, qualquer capacidade disponível é redistribuída para ser usada por outros usuários.

Outra diferença do planejamento justo é a capacidade de priorizar tarefas dentro de uma fila. Geralmente, as tarefas com uma prioridade maior têm acesso aos recursos antes que as tarefas de baixa prioridade. O roteiro do Hadoop inclui um desejo de dar suporte à preempção (quando uma tarefa de baixa prioridade pode ser temporariamente descarregada para a área de troca para permitir a execução de uma tarefa de prioridade mais alta), mas essa funcionalidade não foi implementada ainda.

Outra diferença é a presença de controles de acesso estritos nas filas (considerando que as filas estão vinculadas a uma pessoa ou organização). Esses controles de acesso são definidos em uma base por fila. Eles restringem a capacidade de submeter tarefas a filas e de visualizar e modificar tarefas nas filas.

É possível configurar o planejador de capacidade dentro de vários arquivos de configuração do Hadoop. As filas estão definidas em hadoop-site.xml e as configurações da fila estão definidas em capacity-scheduler.xml. As ACLs podem ser configuradas no mapred-queue-acls.xml. As propriedades da fila individual incluem a porcentagem da capacidade (quando a capacidade de todas as filas no cluster é menor ou igual a 100), a capacidade máxima (o limite de uso da capacidade em excesso de uma fila) e se a fila suporta prioridades. O mais importante, as propriedades dessa fila podem ser manipuladas no tempo de execução, permitindo que elas mudem e evitem interrupções no uso do cluster.

Outras abordagens

Embora não seja um planejador propriamente dito, o Hadoop também suporta a ideia de fornecer clusters virtuais de dentro de clusters físicos maiores, denominados Hadoop On Demand (HOD). A abordagem do HOD usa o gerenciador de recursos Torque para alocação de nós com base nas necessidades do cluster virtual. Com nós alocados, o sistema HOD prepara automaticamente arquivos de configuração e inicializa o sistema com base nos nós dentro do cluster virtual. Uma vez inicializado, o cluster virtual de HOD pode ser usado de um modo relativamente independente.

O HOD também é adaptável, assim ele pode ser reduzido quando a carga de trabalho muda. O HOD automaticamente desloca nós do cluster virtual depois de detectar a não execução de tarefas por um período determinado de tempo. Esse comportamento permite o uso mais eficiente dos ativos gerais de cluster físico.

O HOD é um modelo interessante para implementações de clusters do Hadoop dentro de uma infraestrutura em nuvem. Ele oferece a vantagem que, com menos compartilhamento de nós, há maior segurança e, em alguns casos, desempenho aprimorado devido à ausência de contenção dentro dos nós para tarefas de vários usuários.


Quando usar cada planejador

Na abordagem acima, é possível ver a que esses algoritmos de planejamento se destinam. Se estiver executando um cluster do Hadoop grande, com diversos clientes e diferentes tipos e prioridade de tarefas, o planejador de capacidade é a opção apropriada para assegurar acesso garantido com potencial de reutilização da capacidade não utilizada e priorização das tarefas dentro das filas.

Embora menos complexo, o planejador justo trabalha bem quando clusters grandes e pequenos são usados pela mesma organização com um número limitado de cargas de trabalho. O planejamento justo ainda fornece o meio para distribuir de modo não uniforme capacidade aos conjuntos (de tarefas), mas de uma maneira mais simples e menos configurável. O planejador justo é útil na presença de diversas tarefas, porque pode fornecer tempos de resposta rápidos para tarefas pequenas combinadas com tarefas maiores (suportando modelos de uso mais interativos).


Desenvolvimentos futuros no planejamento do Hadoop

Agora que o planejador Hadoop é conectável, é possível ver novos planejadores desenvolvidos para implementações de cluster único. Dois planejadores em processo (na lista de problemas do Hadoop) incluem o planejador adaptável e o planejador de aprendizado. O planejador de aprendizado (MAPREDUCE-1349) se destina a manter um nível de utilização quando apresentado com um conjunto diverso de cargas de trabalho. Atualmente, essa implementação de planejador se concentra nas médias de cargas da CPU, mas a utilização de rede e a E/S de disco são planejadas. O planejador adaptável (MAPREDUCE-1380) se concentra no ajuste adaptável de recursos para determinada tarefa baseada no seu desempenho e nas metas de negócios definidas pelo usuário.


Conclusão

A introdução do planejador conectável foi mais uma evolução na computação de cluster com Hadoop. O planejador conectável permite o uso (e desenvolvimento) de planejadores otimizados para carga de trabalho e aplicativo específicos. Os novos planejadores também tornaram possível criar armazéns de dados multiusuários com Hadoop, considerando a capacidade de compartilhar a infraestrutura geral do Hadoop com vários usuários e organizações.

O Hadoop está evoluindo à medida que seus modelos de uso evoluem e agora suporta novos tipos de cargas de trabalho e cenários de uso (por exemplo, grandes armazéns de dados multiusuários e multiorganização). A nova flexibilidade que o Hadoop fornece é um grande passo em direção ao uso mais otimizado dos recursos de cluster na analítica de Big Data.

Recursos

Aprender

  • O website do Apache Hadoop é a melhor fonte para documentação, listas de emails e é o local para se aprender mais sobre o Hadoop, incluindo sua instalação e configuração.
  • Cada um dos planejadores oferece uma grande variedade de propriedades configuráveis. É possível localizar essas propriedades pelo Apache para o planejador justo e o planejador de capacidade.
  • Distributed computing with Linux and Hadoop (Ken Mann e M. Tim Jones, developerWorks, dezembro de 2008) fornece uma introdução à arquitetura do Hadoop, incluindo as noções básicas do paradigma MapReduce para processamento distribuído de dados em massa.
  • O HADOOP-3412 define o problema para refatorar o planejador fora do JobTracker. A implementação original do Hadoop combinou o algoritmo do planejador dentro do nó do JobTracker. Esse problema, submetido em 2008, resultou na remoção do planejador corrigido e na adição de um planejador conectável suportando maior flexibilidade para a variedade de cargas de trabalho que o Hadoop suporta.
  • É possível localizar uma introdução prática ao Hadoop na série do developerWorks "Processamento de dados distribuídos com Hadoop" de M. Tim Jones. A Parte 1, Introdução (maio de 2010) apresenta como configurar e usar um cluster do Hadoop de nó único. Na parte 2, Indo mais longe (junho de 2010), você aprende a configurar e usar um cluster multinós. Finalmente, na parte 3, Desenvolvimento de aplicativo (julho de 2010), você aprende a desenvolver mapas e reduzir aplicativos dentro do ambiente do Hadoop.
  • Planejamento é um tópico interessante no Linux ®e é possível encontrar similaridades entre tarefas de planejamento no Hadoop e sequências de planejamento do Linux. É possível aprender mais sobre planejamento no Linux em Inside the Linux Scheduler (M. Tim Jones, developerWorks, junho de 2006), Inside the Linux 2.6 Completely Fair Scheduler (M. Tim Jones, developerWorks, dezembro de 2009) e Simulação do Linux Scheduler (M. Tim Jones, developerWorks, fevereiro de 2011).
  • A zona de software livre do developerWorks fornece uma ampla gama de informações sobre ferramentas de software livre e sobre o uso de tecnologias de software livre.
  • Siga o developerWorks no Twitter. Também é possível seguir este autor no Twitter em M. Tim Jones.
  • Acompanhe as demos on demand do developerWorks desde demos de instalação e configuração do produto para iniciantes até funcionalidade avançada para desenvolvedores experientes.

Obter produtos e tecnologias

  • Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar a Arquitetura Orientada a Serviços de forma eficiente.

Discutir

  • Participe da comunidade do My developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre, Linux
ArticleID=781940
ArticleTitle=Planejamento no Hadoop
publish-date=12222011