29
Como já visto no capitulo anterior, um cluster utiliza um conjunto de máquinas para
processar o sistema de forma transparente. O modelo MapReduce também utiliza este
conceito de transparência. Cada dispositivo é responsável por uma atividade dentro do
sistema. No caso dos dispositivos responsáveis pela função map, estes são denominados
mappers enquanto os que executam a função reduce são conhecidos como reducers (LIN,
2010, p. 22). Para os respectivos agentes, as assinaturas de cada função são especificadas com
as seguintes assinaturas (DEAN; GHEMAWAT, 2004, p 2):
map: (c1, v1) -> (c2, v2)
reduce: (c2, list(v2)) -> (c3, v3)
Por convenção uma lista de valores será representada pelo uso da marcação „list (...)‟,
que deverá conter como argumento da função o tipo dos valores. A saída da função será
especificada pela seta (->), onde as informações anteriores a ela informam os argumentos de
entrada da função, enquanto os dados após a seta especificam o resultado gerado pela mesma.
Para executar um mapper, é necessário utilizar dois argumentos, uma chave
(especificada pelo componente c1) e o seu respectivo valor (v1). O resultado dessa função é
gerado como um dado intermediário, com uma chave e um valor (c2, v2). Esse tipo de
resultado é conhecido como par de chave-valor, que é sempre apresentado como uma
indexação, ou seja, para cada valor, existe uma determinada chave. Os dados utilizados
durante a função map são especificados pelo programador, que podem ser representados por
qualquer tipo, tais como variáveis de inteiros, pontos flutuantes e strings, ou até mesmo
estruturas complexas como listas e arrays. Outras estruturas também podem ser utilizadas
dentro do modelo MapReduce, como no caso das páginas web e dos grafos. Exemplos da
utilização dessas estruturas podem ser encontradas em Lin (2010, p. 96 - 102), nos algoritmos
de pagerank e Dijkstra.
O MapReduce, utiliza uma camada implícita entre as fases map e reduce para ordenar e
agrupar os valores que possuem a mesma chave em comum, dessa forma, um conjunto de
valores é agrupado para uma única chave. Os reducers recebem como argumentos, a saída dos
mappers, para cada chave intermediaria (c2) existe um conjunto de valores intermediários (list
(v2)), ou seja, uma lista de valores é relacionada a uma chave, que será designada a um
reducer. A saída gerada deste, resulta em um novo par de chave-valor (c3, v3), cada resultado
é armazenado no sistema de arquivos distribuídos. Caso exista uma quantidade R de reducers,
um conjunto de R arquivos deverá ser cadastrado. As saídas geradas pelos agentes que