Processamento de Dados Massivos/O ambiente Hadoop: diferenças entre revisões

m
sem resumo de edição
(Criou nova página com '= Hadoop = Apesar da importância conceitual dos trabalhos sobre o Google File System e o modelo MapReduce, o sistema descrito pelos autores se manteve propriedade únic...')
 
mSem resumo de edição
= Hadoop =
 
Apesar da importância conceitual dos trabalhos sobre o Google File System e o modelo MapReduce, o sistema descrito pelos autores se manteve propriedade única da Google, não tendo sido distribuído externamente. Isso mudou apenas com a divulgação do Hadoop, um ambiente de código aberto que implementa os princípios daqueles dois sistemas de forma bastante aproximada, apesar de algumas diferenças. Hadoop foi desenvolvido originalmente por Michael J. Cafarella e Doug Cutting, este último funcionário da Yahoo!. Com o passar do tempo, o projeto passou a ser hospedado pela Apache Software Foundation e vem recebendo contribuições de diversas fontes, principalmente da própria Yahoo! <ref> </ref>.
 
As principais diferenças entre Hadoop e o modelo original da Google são a linguagem (Hadoop é escrito em Java, enquanto GFS/MR são escritos em C/C++) e o fato do HDFS não permitir a operação de escrita ao fim de arquivos já criados (''append''). No HDFS, arquivos só podem ser abertos para escrita quando de sua criação; depois disso se tornam apenas de leitura. Essas duas diferenças acarretam algumas outras, como a mudança da interface de programação, uma maior amarração entre a interface do sistema de arquivos HDFS e classes Java para o processamento dos conteúdo dos arquivos em função do tipo do conteúdo e uma extensão do modelo de entrada para lidar com diretórios (usar todos os arquivos em um diretório como entrada) ao invés de apenas arquivos isolados.
 
 
Considerando-se as diferenças de implementação, no caso do Hadoop vale a pena analisar detalhadamente o código realmente utilizado para a aplicação <code>ContaPalavras</code>, ao invés de apenas um pseudo-código mais abstrado. O código apresentado a seguir foi obtido do tutorial sobre Hadoop da Yahoo! <ref> </ref>, uma fonte de consulta altamente recomendada para detalhes sobre elementos de instalação, programação e execução no Hadoop. Outra fonte que merece menção é o tutorial da Apache Software Foundation <ref> </ref>.
 
A função <code>map</code> define os tipos dos pares chave/valor de entrada e saída (linha 2). Neste caso, para um arquivo texto, Hadoop entrega cada linha com uma chave que corresponde à posição (em bytes) do começo da linha (texto) em relação ao começo do arquivo, daí usar um inteiro longo. A chave produzida pelo map será uma palavra (texto) e o valor será um inteiro. Os tipos terminados em ''Writable'' são usados pelo Hadoop para lidar com a leitura e escrita dos mesmos nos arquivos do HDFS corretamente (serialização e desserialização).
As linhas 8 e 9 identificam as classes que definem as operações de mapeamento e redução. As linhas 11 e 12 associam arquivos armazenados no HDFS à entrada e saída do programa. O nome usado como entrada pode ser o de um arquivo específico ou de um diretório contendo diversos arquivos, que serão todos processados da mesma forma, potencialemente em paralelo. Já o nome usado para a saída deve sempre ser o de um diretório vazio, onde serão criados arquivos para cada nó de processamento que executará a função de redução.
 
O tipo dos pares chave/valor de saída é definido pelos comandos nas linhas 5 e 6. Com os comandos usados, a saída será gerada como arquivo texto, com um caractere de tabulação separando a chave do valor em cada linha. Como não há comandos semelhantes para a entrada, o tipo assumido é o de arquivo de texto simples. O sistema oferece também a opção de tratar a entrada como um arquivo texto com chaves e valores separados por um caractere de tabulação (como o gerado pela saída do programa), ou como um arquivo com registros complexos, caso em que o programador deverá fornecer uma classe de leitura adequada. Neste último caso há detalhes que precisam ser tratados em relação ao processamento de registros que ultrapassam o limite de um bloco do arquivo no HDFS. Este e outros detalhes da interface de programação podem ser encontrados no tutorial da Yahoo! <ref> </ref>.
 
Ao se executar o método ''runJob'' do objeto de configuração que descreve a aplicação (linha 14), o ambiente de tempo de execução do Hadoop passa a executar a tarefa. Os passos envolvidos nesse processo são descritos a seguir.
 
Como no MapReduce original, Hadoop usa replicação de tarefas para conseguir balanceamento de carga e tolerância a falhas. À medida que as tarefas de um certo tipo vão terminando, o processo mestre dispara novas execuções de tarefas que estão levando mais tempo para serem completadas em outros nós. Além disso, ele monitora o estado de todos os trabalhadores a fim de detectar nós que tenham deixado de responder. Nesse caso, ele identifica todas as tarefas que haviam sido atribuídas a um nó (sejam ''maps'' ou ''reduces'') e as atribui novamente a outros nós ainda ativos.
 
{{AutoCat}}
 
==Referências==
 
<references/>
49

edições