# Introdução

A evolução dos sistemas computacionais e a difusão do acesso à Internet em diversas formas estão dando origem ao que muitos denominam “a Idade da Informação”. Os volumes massivos de dados produzidos pelas mais diversas fontes, como medições coletadas por sensores dos mais diversos tipos, registros (logs) dos serviços oferecidos pela Web, diversos tipos de conteúdo produzidos pelos usuários no que se convencionou chamar de Web 2.0, tudo isso apresenta novos desafios e possibilidades. As possibilidades são inúmeras, sempre baseadas na ideia de se derivar novo conhecimento a partir da análise de tais volumes de dados. Os desafios, por sua vez, envolvem questões como definir formas eficientes de coletar e armazenar toda informação, garantir sua preservação e acesso eficientes, bem como extrair informação útil de tais volumes de dados. Dado o interesse geral devido ao seu potencial, essa área vem recebendo grande atenção na imprensa técnica e mesmo na imprensa em geral, sendo denominada “Big-data”. Neste trabalho, pretendemos discutir o problema de como processar esses grandes volumes de dados.
Exatamente o que se entende por big-data depende bastante do contexto. Apesar de normalmente se associar o conceito apenas a volumes extremamente grandes de dados, na verdade a definição abrange três dimensões, que devem ainda ser consideradas em perspectiva para cada usuário: volume, velocidade e variedade.
Certamente, volume é uma dimensão claramente associada a dados massivos. Um infográfico produzido por GOOD, Oliver Munday e IBM representa alguns desses volumes. Entre eles, pode-se ver que a cada minuto são carregados no Youtube o equivalente a 20 horas de vídeo, que há em média 50 milhões de tweets por dia e que 2,9 milhões de mensagens de e-mail são enviados por segundo. Entretanto, a definição de volume massivo deve ser também ajustada em função dos recursos disponíveis para seu processamento. Nem todas as organizações possuem os recursos computacionais de uma empresa como Google ou Facebook; em muitos casos, dados na casa de centenas de Gigabytes já apresentam um desafio para serem processados, considerando-se os recursos disponíveis.
Uma segunda dimensão é a velocidade com que os dados são gerados e com que precisam ser processados em diversos casos. Por exemplo, o Observatório da Web coleta um grande volume de informações em tempo real de diversas fontes, como sítios de notícias, blogs e Twitter, para gerar diversas análises atualizadas a cada minuto durante eventos transmitidos ao vivo. Nesse caso, o desafio é processar o volume de dados gerado ao longo do tempo e em tempo hábil, o que é denominado processamento de streams.
Finalmente, a variedade dos dados e dos resultados esperados também são determinantes para a definição de big-data. A possibilidade de se coletar informações textuais, fotos, áudio e vídeo tornam muitas vezes inviável o uso de sistemas de gerência de bancos de dados tradicionais. A exploração de informações de redes complexas, representando relacionamentos entre pessoas e/ou eventos dá origem a grafos complexos, que também não são facilmente armazenados em sistemas convencionais.
Enfim, o processamento de dados massivos de forma eficiente exige o uso de paralelismo, tanto para o armazenamento dos dados quanto para seu processamento. Dessa forma, o acesso aos dados é acelerado, já que leituras em paralelo se tornam possíveis, e o processamento é dividido entre diversas unidades de processamento, acelerando a geração de respostas. Esse modelo de paralelismo, usualmente conhecido como o padrão dividir-para-conquistar, ou divisão-e-conquista.
Apesar desse modelo de processamento já ser largamente conhecido da comunidade de processamento paralelo, ele também vem ganhando larga aceitação nas tarefas de big-data pelo surgimento de ambientes de processamento desenvolvidos especificamente para esse tipo de atividade. Além disso, esses grandes volumes de dados surgem normalmente no contexto de aplicações em nuvem, que executam em grandes datacenters, onde recursos para armazenamento e processamento distribuído já existem na forma de um grande número de máquinas convencionais interligadas por redes de alta velocidade.
Considerando todos esses fatores, o restante deste livro abordará os elementos principais para viabilizar o processamento de dados massivos. Na seção 2, o ambiente dos datacenters atuais é discutido em mais detalhes, para caracterizar melhor as restrições e demandas impostas sobre os ambientes de execução. Um aspecto essencial associado ao ambiente de execução é o sistema de armazenamento dos dados, que também será discutido. Com base nessa análise, a seção 3 discute os desafios enfrentados para se garantir o alto desempenho nesse ambiente. Em seguida, a seção 4 introduz o modelo de programação MapReduce, que se tornou um dos mais populares na área, e a seção 5 dá detalhes do Hadoop, a principal implementação do modelo. Apesar de sua popularidade, entretanto, MapReduce e Hadoop não são a solução para todos os problemas. A seção 6 apresenta ambientes desenvolvidos para facilitar o processamento de certos tipos de dados e certos tipos de algoritmos que não se adaptam bem ao modelo MapReduce. Ainda nesse sentido, a seção 7 descreve uma metodologia para o desenvolvimento de aplicações big-data e traz diversos estudos de caso desenvolvidos pelos alunos da disciplina Processamento de Dados Massivos do Departamento de Ciência da Computação da Universidade Federal de Minas Gerais (DCC/UFMG). Finalmente, a seção 8 apresenta algumas considerações finais.

## Referências

* ↑ Wang, W.-L. Viewpoint: information in the information age. Communications of the ACM 42(6) June 1999, 23–24
* ↑ Jacobs, A. The pathologies of big data. Communications of the ACM 52(8), Aug. 2009, 36–44.
* ↑ Corrigan, D. What is big data?. - visitado em outubro de 2012.
* ↑ http://www.bimeanalytics.com/wp-content/uploads/2011/09/world-of-data.jpeg
* ↑ http://observatorio.inweb.org.br/