MR | Paralelização

MapReduce (Big Data)

Paralelização


Como dito na introdução, é necessário frequentemente utilizar diversas unidades de processamento para obter o poder computacional desejado para resolver alguns problemas. A fim de atender a essa demanda, foram criados sistemas que possuem essas diversas unidades de processamento, objetivando aumentar a capacidade de computação ao menor custo possível. A um sistema com diversas dessas unidades se dá o nome de cluster. Cada um dos processadores de um cluster é chamado de nó.

Existem dois tipos básicos de sistemas com diversos processadores dedicados a resolver o mesmo problema: os sistemas paralelos e os sistemas distribuídos. Nos sistemas paralelos, todos os processadores estão fisicamente na mesma máquina. Isso significa que existe um compartilhamento de memória e discos, mesmo que ele não seja completo. Nos sistemas distribuídos, os processadores estão em máquinas diferentes que estão conectadas por alguma rede. Então, apenas os recursos disponíveis na rede são comuns a todas as máquinas, de forma que cada uma tem sua memória e seu disco próprio.

Paralelizar um processamento de dados é dividir o esforço computacional entre diversos processadores e fazer com que isso ocorra de forma aproximadamente simultânea. A paralelização pode ser implementada através de uma divisão do bloco inicial de dados em blocos menores que podem ser processados individualmente, simultaneamente e em menos tempo do que o bloco inicial. Ao final, os dados oriundos dos diversos processamentos devem ser agregados para se obter o resultado final. Uma paralelização pode ser implementada e executada num sistema paralelo ou em um sistema distribuído. A figura 2 ilustra um exemplo onde os dados de entrada são fragmentados, processados em diferentes nós e agregados para que se obtenha uma saída final.

A paralelização traz diversas complicações que devem ser tratadas para que o processamento seja rápido e seus resultados estejam certos, por exemplo:

  • Como dividir trabalho entre os processadores?
  • Como garantir que os passos do algoritmo que são inevitavelmente sequenciais estejam sendo executados sequencialmente?
  • Como garantir exclusão mútua no acesso aos recursos?
  • Qual o melhor jeito de realizar a agregação?

A chave para resolver esses problemas é garantir a sincronização dos processos envolvidos. Isso porque, em um ambiente de multiprocessos, o andamento de cada processamento individual é imprevisível e, quase sempre, diferente.


Anterior | Topo | Próxima