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

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
mSem resumo de edição
Adicionadas referências importantes
Linha 1:
= 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>[[Wikipedia:Apache Hadoop]]</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.
Linha 10:
 
 
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 name=tutorial_yahoo>Yahoo! [http://developer.yahoo.com/hadoop/tutorial/index.html Hadoop Tutorial] - visitado em outubro de 2012.</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>Apache Software Foundation. [http://hadoop.apache.org/docs/stable/mapred_tutorial.html Map/Reduce Tutorial], 2010. - visitado em outubro de 2012</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).
Linha 26:
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> <name=tutorial_yahoo/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.