Google File System (GFS) e MapReduce: Fundamentos Técnicos
Google File System (GFS)
O Google File System (GFS) é um sistema de arquivos distribuído desenvolvido pela Google para armazenar e gerenciar grandes quantidades de dados em clusters de servidores. Aqui estão os principais conceitos do GFS:
- Divisão em Blocos:
- O GFS divide os arquivos em blocos de tamanho fixo (geralmente 64 MB).
- Cada bloco é replicado em vários servidores para garantir a disponibilidade e a tolerância a falhas.
- Metadados Simplificados:
- O GFS mantém metadados mínimos, como o mapeamento de nomes de arquivos para blocos.
- Isso permite alta escalabilidade e desempenho.
- Chunk Servers e Master Node:
- Os servidores de dados (chunk servers) armazenam os blocos.
- O nó mestre (master node) gerencia os metadados e coordena as operações.
- Leitura e Escrita:
- A leitura e a escrita ocorrem diretamente entre o cliente e os chunk servers.
- O nó mestre controla o mapeamento de blocos para servidores.
MapReduce
O MapReduce é um modelo de programação para processamento paralelo de dados em clusters. Ele foi popularizado pelo Google e é amplamente usado no ecossistema Hadoop. Aqui estão os conceitos-chave do MapReduce:
- Map:
- A fase de mapeamento divide os dados em pares chave-valor.
- Funções de mapeamento são aplicadas a cada par para gerar novos pares intermediários.
- Shuffle e Sort:
- Os pares intermediários são agrupados por chave e ordenados.
- Isso permite que os dados sejam enviados aos reducers corretos.
- Reduce:
- A fase de redução processa os pares intermediários.
- Funções de redução agregam os valores associados a cada chave.
- Escalabilidade e Tolerância a Falhas:
- O MapReduce é altamente escalável e tolerante a falhas, pois pode ser executado em clusters distribuídos.
Exemplo de MapReduce com Python
Vamos criar um exemplo simples de contagem de palavras usando o MapReduce com Python:
Python
from mrjob.job import MRJob
class ContadorPalavras(MRJob):
def mapper(self, _, linha):
for palavra in linha.split():
yield palavra, 1
def reducer(self, palavra, contagens):
yield palavra, sum(contagens)
if __name__ == '__main__':
ContadorPalavras.run()
Neste exemplo, o mapeamento divide o texto em palavras e conta a ocorrência de cada uma. O redutor soma as contagens para obter o resultado final.

Leave a comment