Prévia do material em texto
93
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Unidade III
7 APACHE HADOOP
Nesta unidade, apresentaremos brevemente o conceito de Big Data e introduziremos o Apache
Hadoop, que é um sistema distribuído para armazenamento e processamento de dados voltado para o
Big Data. Serão descritos os componentes e os modos de execução do Hadoop.
7.1 Fundação de software Apache
O volume de dados gerados por empresas e organizações aumentou exponencialmente nas últimas
décadas, gerando dados estruturados e não estruturados. Para analisar de forma eficiente esses
grandes volumes de dados são necessárias ferramentas adequadas. Assim temos o Apache, que é uma
plataforma de software de código aberto baseada em Java para armazenamento e processamento
voltado ao Big Data.
A Apache Software Foundation (ASF), ou Apache Group, foi fundada em junho de 1999, nos Estados
Unidos. Ela não possui fins lucrativos e desenvolve software de código aberto (open source), sendo que
um dos seus projetos mais relevantes é o servidor web Apache HTTP Server.
A figura a seguir apresenta o logo da Apache.
Figura 45 – Logo da Apache
Disponível em: https://www.apache.org/foundation/. Acesso em: 3 out. 2024.
O objetivo do projeto é fornecer um servidor seguro, eficiente e extensível que provém um
serviço observando os atuais padrões do HTTP. Além disso, o projeto é um dos servidores web mais
populares desde 1996.
94
Unidade III
Lembrete
Um software livre é um software com o código‑fonte aberto de modo
que qualquer pessoa pode visualizar, editar, alterar e distribuir cópias
inalteradas ou versões do software com suas melhorias. Um projeto de
código aberto é composto por todos os aspectos da criação, manutenção
e distribuição de software de código aberto, incluindo a construção da
comunicação, o processo de atualização, entre outros.
7.2 Conceito de Big Data
Segundo Bordin et al. (2021), o termo Big Data não se limita a extensos volumes de dados, mas inclui
a existência de diversidade de formatos dos dados, que podem ser estruturados ou não estruturados.
Além disso, conta com a utilização de várias fontes de dados diferentes e a necessidade de velocidade
para processar esses dados.
As aplicações Big Data também podem ser compreendidas como soluções computacionais
que permitem a análise de extensas bases de dados por meio do processamento de algoritmos que
identifiquem correlações entre os dados para mapear padrões e comportamentos.
Um exemplo em que se verifica um enorme volume de dados é na rede social Facebook. Quando foi
criado, ele utilizava em sua infraestrutura um banco de dados relacional para o armazenamento dos
seus dados. Devida a rápida expansão do número de usuários e de interações no início dos anos 2000,
essa infraestrutura se tornou inadequada. O tamanho do armazenamento da empresa passou de uma
quantia de 15 terabytes em 2007, para 700 terabytes em 2010 (Thusoo et al., 2010).
Atualmente o Big Data considera também os 5 Vs: o volume, a velocidade, a variedade, a veracidade
e o valor. A figura a seguir ilustra os 5 elementos.
Volume
Valor Velocidade
VariedadeVeracidade
Figura 46 – 5 Vs do Big Data
95
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
A produção de dados tem crescido de forma exponencial e possui um alto volume de dados, que
é um requisito para Big Data. Além de dados estruturados em bancos de dados relacionais, como os
sistemas corporativos e aplicações web, surgiram os dados não estruturados, os logs desses sistemas, as
páginas web, as mídias sociais, celulares, imagens, vídeos, sensores, microfones, informações geradas por
Inteligência Artificial (IA) e Internet das Coisas (IoT).
Assim, o Big Data também está relacionado à velocidade, pois muitas das novas aplicações precisam
de respostas em um curto prazo e, em muitos casos, em tempo real. A rapidez de processamento das
informações traz uma vantagem competitiva para empresas. Não basta ter um gigantesco volume de
dados se o tempo de processamento for muito demorado.
Outra questão essencial para o Big Data é a variedade de fontes de dados. Algumas aplicações usam
redes sociais, aplicativos, navegação no site, dados públicos, sensores, câmeras, documentos pessoais,
e‑mails e transações anteriores de um cliente como fornecedores dos dados. Com isso, a tarefa de
compilação e organização de dados se tornou extremamente desafiadora.
As informações devem ser confiáveis, sendo necessário verificar a veracidade dos dados. Como a
complexidade da informação aumentou, as organizações devem proporcionar melhores níveis de
confiança aos usuários que possuem a informação, garantindo a consistência através da empresa e
salvaguardando a informação. Afinal, com tantos dados disponíveis, é importante separar os verdadeiros
dos falsos, detectando fake news.
Por fim, o pilar de valor se reflete em como essa imensidade de dados pode ser transformada de
forma efetiva em negócios. Através das informações geradas a partir dos dados coletados, as empresas
podem melhorar sua gestão, criar inovações, compreender e atender às necessidades de seus clientes,
e alcançar qualidade utilizando métodos de melhoria contínua. Na implementação de um Big Data,
existem custos relevantes, como o de armazenamento, de consultoria, de treinamento e de análise dos
dados e das necessidades atuais e futuras da empresa. Se a empresa não consegue gerar valor com
esses dados, certamente está realizando as análises de dados de forma equivocada.
96
Unidade III
Saiba mais
Existe uma ampla literatura sobre o tema de Big Data. Desse modo,
destacaremos algumas referências a seguir.
SANTOS, R. R. et al. Fundamentos de Big Data. Porto Alegre: Grupo A, 2021.
DAVENPORT, T. H. Big Data no trabalho. São Paulo: Alta Books, 2017.
CONEGLIAN, C. S.; GONÇALVEZ, P. R.; SEGUNDO, J. E. O profissional
da informação na era do Big Data. Encontros Bibli: revista eletrônica de
biblioteconomia e ciência da informação, [s.l.], v. 22, n. 50, p. 128‑143, 2017.
Disponível em: https://tinyurl.com/3w9wv9vr. Acesso em: 23 set. 2024.
RODRIGUES, A. A.; NÓBREGA, E.; DIAS, G. A. Desafios da gestão de dados
na era do Big Data: perspectivas profissionais. Informação & Tecnologia,
v. 4, n. 2, p. 63‑79, 2017. Disponível em: https://abrir.link/rKBcs. Acesso
em: 11 set. 2024.
Como exemplos de aplicações do Big Data no dia a dia, temos o gerenciamento de riscos e fraudes
em serviços financeiros, informações de tempo real em mídias digitais e análise de navegações em sites,
análises de registro médicos e análise do genoma humano na área da saúde, a otimização da logística
e análise de tráfego no ramo de transportes, detecção de ataques cibernéticos, entre outros.
7.3 Apache Hadoop
O projeto Apache Hadoop desenvolveu um software de código aberto para computação confiável,
escalável e distribuída. O Hadoop foi escrito em linguagem de programação Java e é projetado para
escalar alguns servidores para milhares de máquinas, de forma a oferecer capacidade de processamento
e armazenamento em cada máquina. A biblioteca do software detecta e trata falhas na camada de
aplicação e então entrega um serviço de alta disponibilidade para um cluster de computadores, mesmo
que o hardware esteja sujeito a falhas.
A figura a seguir apresenta o logo do software Apache Hadoop.
Figura 47 – Logo do Apache Hadoop
Disponível em: https://hadoop.apache.org/. Acesso em: 23 set. 2024.
97
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Observação
É preciso termos claro que existem quatro liberdades para os usuários
de um software de código aberto: de execução, de análise, de redistribuição
e de modificação. Caso alguma dessas quatro liberdades não ocorra, o
software não pode ser considerado de código aberto.
7.3.1 Componentes do Hadoop
No Hadoop, são utilizados cinco processos para a realização de um trabalho: NameNode, DataNode,
SecondaryNameNode, JobTracker e TaskTracker. Os três primeiros compõem o modelo de programação
MapReduce. Enquanto o TaskTracker e JobTrackerformam o sistema de arquivos HDFS, acrônimo de
Hadoop Distributed File System.
Os componentes DataNode e JobTracker têm várias instâncias abertas, uma para cada dispositivo
alocado. Por outro lado, os componentes NameNode, JobTracker e SecondaryNameNode são únicos para
toda a aplicação.
O NameNode é um componente localizado no nó mestre, juntamente ao JobTracker e determina a
estrutura de arquivos no HDFS, ou seja, o metadados. Ele é o gerenciador dos arquivos usados pelo HDFS
e monitora os estados dos nós escravos. Por questões de desempenho, o NameNode mantém seus dados
em memória já que precisa mapear a localização de arquivos de forma recorrente, dividi‑los em blocos,
encaminhando‑os aos nós escravos. Adicionalmente, o NameNode gerencia os metadados e réplicas
dos arquivos.
O componente SecondaryNameNode ajuda o NameNode sendo uma alternativa para recuperação caso
ocorra uma falha. Este componente faz a verificação do log interno do NameNode e os logs de operações.
O DataNode representa os dados que serão distribuídos e replicados e fica nos nós. Cada DataNode
se comunica ao NameNode, sinalizando quais blocos foram armazenados e as atualizações feitas.
JobTracker realiza o controle e o plano de execução das tarefas do MapReduce, de modo que escolhe
os nós que serão utilizados no processamento e faz seu monitoramento.
Em conclusão, o TaskTracker realiza a execução de uma tarefa Map ou de uma tarefa Reduce que
for atribuída. Cada TaskTracker é executado em uma máquina virtual, sendo possível a existência
de várias delas em um único computador físico, o que contribui para melhor utilização dos seus
recursos computacionais.
A configuração entre os nós do Hadoop segue o modelo mestre‑escravo, ou master‑slave, no qual o
nó mestre controla as operações dos nós escravos. A figura a seguir apresenta os cinco componentes do
Apache Hadoop e a relação entre eles.
98
Unidade III
Cliente
SecondaryNameNode
Mestre
NameNode
JobTracker
mestre
escravo1
DataNode
TaskTracker
Map Reduce
escravo2
DataNode
TaskTracker
Map Reduce
escravo3
DataNode
TaskTracker
Map Reduce
escravoN
DataNode
TaskTracker
Map Reduce
escravos
Figura 48 – Componentes do Hadoop
Fonte: Bordin et al. (2021, p. 223).
Ao iniciar a execução, a aplicação é conectada ao nó mestre. Com isso, o JobTracker cria o plano
de execução e calcula a quantidade e quais nós escravos realizarão o processamento dos dados.
Paralelamente, o NameNode grava e controla as informações dos arquivos e o SecondaryNameNode
contabiliza checkpoints do log do NameNode.
Nos nós escravos, o TaskTracker executa as tarefas que lhe foram atribuídas, Map ou Reduce, e o
DataNode gerencia os blocos de arquivos. Os nós escravos também se comunicam com o nó mestre.
Observação
Apesar de a arquitetura do Hadoop utilizar diversas máquinas para
processamento e armazenamento de dados, há um único nó mestre
para gerenciamento do sistema.
7.3.2 Execução do Hadoop
O Hadoop foi projeto para operar com um conjunto de máquinas, mas permite outras formas de
execução: modo local (standalone mode), modo pseudodistribuído (pseudo‑distributed mode) e modo
completamente distribuído (fully distributed mode).
No modo local, que é o modo padrão, os parâmetros dos arquivos de configuração já estarão
preparados. Além disso, o processamento da aplicação é executado integralmente apenas na máquina
local, sendo o modo recomendado em fases iniciais do desenvolvimento.
No modo pseudodistribuído, a aplicação é executada ainda em modo local, que será um cluster de
somente uma máquina. Esse modo permite a sua simulação, pois utiliza todos os processos de uma
99
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
execução paralela efetiva. Além dessas configurações do modo, é necessário especificar a localização
do SecondaryNameNode e dos nós escravos através de seus endereços de rede ou pelo apelido desses
recursos nos respectivos arquivos mestres e escravos. No modo pseudodistribuído, é simulada uma
execução distribuída.
7.3.3 Arquivos de configuração do Hadoop
Podemos observar que a figura a seguir apresenta o código de configuração do arquivo core‑site.xml
no modo pseudodistribuído.
1.
2.
3.
4.
5. fs.default.name
6. hdfs://localhost:9000
7. The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation.
8.
9.
Figura 49 – Código de configuração do arquivo core‑site.xml no modo pseudodistribuído
Fonte: Goldman et al. (2012, p. 15).
Neste código, é configurado o arquivo core‑site.xml visando informar a localização do NameNode.
Os pontos mais relevantes desse arquivo estão delimitados pelas tags XML e , como
indicado nas linhas 5 e 6, respectivamente. A tag determina o nome da variável a ser editada,
fs.default.name, e a tag atribuí um valor a esta. As demais linhas trazem comentários e tags
necessárias para a estruturação do arquivo XML.
No modo pseudodistribuído, também é necessário configurar os arquivos mapred‑site.xml e hdfs‑site.xml.
O código a seguir é do arquivo mapred‑site.xml e, na linha 5, atribui‑se à tag o nome da
variável mapred.job.tracker. O valor dessa variável é mostrado na linha 6 e é composto pelo hostname e
pela porta onde o JobTracker será executado, no caso localhost:9001.
1.
2.
3.
4.
5. mapred.job.tracker
6. localhost:9001
7. The host and port that the MapReduce job tracker
runs at.
8.
9.
Figura 50 – Código de configuração do arquivo mapred‑site.xml no modo pseudodistribuído
Fonte: Goldman et al. (2012, p. 15).
100
Unidade III
A configuração do arquivo hdfs‑site.xml é utilizada para determinar o número de réplicas de cada
bloco de arquivo armazenado no HDFS, conforme mostrado no código a seguir.
1.
2.
3.
4.
5. dfs.replication
6. 1
7. The actual number of replications can be specified
when the file is created.
8.
9.
Figura 51 – Código de configuração do arquivo hdfs‑site no modo pseudodistribuído
Fonte: Goldman et al. (2012, p. 15).
No caso deste código, a tag indica o valor de 1 como correspondente ao número de
réplicas na linha 6.
O modo completamente distribuído utiliza um cluster de computadores. Para isso, deve‑se definir
os parâmetros específicos, os endereços do SecondaryNameNode e dos nós escravos, e editar os três
arquivos de configuração. Como neste modo temos diversos computadores, deve‑se indicar quais
máquinas irão efetivamente executar cada componente.
1.
2.
3.
4.
5. fs.default.name
6. hdfs://master:9000
7. The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation.
8.
9.
Figura 52 – Código de configuração do arquivo core‑site.xml no modo completamente distribuído
Fonte: Goldman et al. (2012, p. 16).
Lembrete
Existem três arquivos de configuração para definição dos modos
de operação no Hadoop: core-site.xml, hdfs-site.xml e
mapred-site.xml.
101
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
8 HDFS E MAPREDUCE
Neste tópico, conheceremos o sistema de arquivos distribuído Hadoop (HDFS), alguns de seus
comandos, a divisão de blocos para salvar um arquivo e a replicação de dados.
8.1 Sistema de arquivos distribuídos Hadoop (HDFS)
Para manipular arquivos, é utilizado o sistema operacional instalado na máquina através do sistema
de gerenciadorde arquivos. As funcionalidades de um sistema de arquivos são: o armazenamento,
a nomeação, a estrutura de diretórios, o compartilhamento, a proteção e permissão de acesso aos
arquivos. O sistema de arquivos deve esconder a complexidade de sua estrutura, de modo a tornar
suas operações transparentes para o usuário. Dada essa transparência, o sistema de arquivo não deve
demandar conhecimentos técnicos específicos para ser operado.
Além dessas funcionalidades, existem características essenciais para um sistema de arquivos
distribuídos. Ele deve ser seguro, garantindo que os arquivos não sejam corrompidos durante a
transferência e acesso das informações, e é preciso controle de acesso, permitindo somente a utilização
de usuários que tenham liberação de uso. A integridade é outra característica que deve ser mantida,
sendo que o sistema precisa controlar as alterações realizadas no arquivo. Também ser deve ser
tolerante a falhas, já que não deve interromper seu funcionamento quando um de seus nós escravos
falha. O sistema deve ser consistente para que todos os usuários tenham a mesma visão de seus
arquivos e, por fim, mesmo que seja utilizado por muitos usuários simultaneamente, necessita manter
seu desempenho em alta performance.
O sistema de arquivos Hadoop Distributed File System (HDFS) atua de forma distribuída e possui as
funções necessárias de um sistema de arquivo convencional. Adicionalmente, o HDFS distribui os dados
de forma transparente para o usuário e que assegura a eficiência e escalabilidade.
O HDFS, é integrado ao framework do Hadoop e foi inspirado no Sistema de Arquivos do Google (GFS).
Uma diferença do HDFS é o fato de ser um código aberto e implementado na linguagem de programação
Java. Além disso, ele suporta o armazenamento e a computação de grandes volumes de dados em
agrupamentos de computadores heterogêneos.
Para se determinar quantas máquinas podem ser utilizadas em um HDFS, é necessário conhecer a
probabilidade de falha de uma dessas máquinas. De forma que, quanto maior o número de máquinas,
maior será a probabilidade de ocorrência de problemas em uma delas.
Visando à escalabilidade, o HDFS busca a promoção da tolerância, detecção e recuperação automática
de falhas. Dadas essas propriedades, mesmo se alguma máquina do aglomerado falhar, não ocorrerá
a interrupção da aplicação como um todo. Isso acontece porque as atividades que seriam feitas na
máquina defeituosa, serão reiniciadas ou, no pior caso, transferidas para uma outra máquina disponível,
sem a interferência e conhecimento do usuário.
102
Unidade III
8.1.1 Comando HDFS
Normalmente, a interface utilizada pelo HDFS é a linha de comando. A primeira etapa para utilizar
um aglomerado Hadoop é a formatação do HDFS para o futuro recebimento dos dados da aplicação. Na
máquina onde está o NameNode, será executado o comando a seguir:
hadoop namenode -format
A sintaxe dos comandos no HDFS é simular os comandos do sistema operacional Linux, começando
com o prefixo hadoop fs, como indicado a seguir:
hadoop fs -comando [argumentos]
Os dados que serão utilizados já devem estar no HDFS para que a operação ocorra no modo
pseudodistribuído ou completamente distribuído. Assim, o usuário precisa salvar os arquivos de dados
armazenados localmente para o HDFS. Por exemplo, o comando salva no HDFS o arquivo meudocumento.txt
que está na máquina local.
hadoop fs -put meudocumento.txt /user/hadoop_user
O comando put do Linux envia o conteúdo para o servidor HDFS, que possui estrutura de diretórios
padronizada com o nome do usuário dentro do diretório /user. Para apresentar a listagem de todos
os arquivos e diretórios contidos no diretório raiz, isto é, em /user/hadoop_user, executamos o
seguinte comando:
hadoop fs –ls
Após o armazenamento dos arquivos no HDFS, existe a possibilidade de submeter essas aplicações
para a execução de uma aplicação Hadoop. Se for necessária a cópia dos arquivos para o sistema local
após a execução, é utilizado o comando ‑get, conforme mostrado a seguir:
hadoop fs -get meudocumento.txt localfile
8.1.2 Divisão de arquivo em blocos
Para aplicações Big Data, alguns arquivos não podem ser armazenados em somente um disco
rígido, sendo necessária a criação de divisão desses arquivos para distribui‑los em um conglomerado de
computadores. O HDFS facilita essa distribuição de arquivos de modo que o desenvolvedor apenas altere
os parâmetros de configuração do modo do Hadoop.
Antes do armazenamento do arquivo, o HDFS realiza um procedimento que divide o arquivo em uma
sequência de bloco com tamanho fixo. O tamanho padrão definido é de 64 Megabytes (64 Mb) e pode ser
alterado através da configuração. As operações de gravação e leitura se tornam mais eficientes quando
blocos maiores são gravados. Para efeito de comparação, o tamanho do bloco em sistema de arquivos
tradicionais é de 512 bytes. Assim, esses arquivos divididos são distribuídos entre os nós escravos.
103
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Tal divisão proporciona mais velocidade, pois a gravação ocorre paralelamente em diversos
dispositivos, mais facilidade para regravação dos arquivos, uma vez que serão refeitos somente os blocos
com erro, e maior segurança, pois, para tornar o sistema tolerante a falhas, os dados serão espalhados
e posteriormente replicados.
Para organizar fisicamente as centenas ou milhares de máquinas escravas de um aglomerado Hadoop,
elas são colocadas em racks em salas reservadas para pessoas autorizadas. Um rack contém um conjunto
de máquinas alocadas em um mesmo espaço físico, que são interligadas por um switch ou comutador.
A figura a seguir apresenta as etapas para a divisão de blocos a fim de armazenar um arquivo de
320 Mb com blocos fixos de 64 Mb no HDFS.
Arquivo 320 MB:
• NameNode verifica espaços em branco
• Divide o arquivo em cinco pedaços de 64 MB e nomeia os blocos
com os seguintes IDs (600, 700, 1100, 1200, 1300)
• Define local onde devem ser gravados os blocos originais (em azul)
DN1
600
DN2
700
DN3
1100
DN4
1200
DN5
1300
Figura 53 – Divisão em blocos de arquivo 320 MB
Adaptada de: Santos et al. (2021, p. 75).
8.1.3 Replicação de dados
Após a divisão do arquivo em bloco, o HDFS replica cada bloco com o intuito de aumentar a
confiabilidade do sistema. Por padrão, um bloco do HDFS possui três réplicas alocadas em diferentes
nós, sendo possível alterar essa quantidade pelos arquivos de configuração.
A figura a seguir apresenta o processo de replicação de blocos. No caso, serão copiados dois arquivos,
arquivoA e arquivoB, para o HDFS. Cada arquivo é subdividido em diversos blocos de tamanho fixo de
64 Mb, sendo que o último bloco pode ser menor por alocar o final do arquivo.
104
Unidade III
escravoX1
escravoX2
escravoX3
escravoXN
armárioX
a1
a1
b2
b1
a2
aN
b1
a3
a2
a4
b2
bN
arquivoA
64 Mb
a1
64 Mb
a2
64 Mb
a3
64 Mb
a4
transparente para o usuário, que não precisa ter nenhuma ação.
Considerando todos estes aspectos, compreendemos que o HDFS utiliza a divisão de blocos e
replicação de dados, cuja configuração pode ser ajustada pelo usuário.
8.1.4 Arquitetura do HDFS
Conforme abordado anteriormente, O HDFS é implementado sobre a arquitetura mestre/escravo. No
nó mestre, existe uma instância do NameNode, o componente central do HDFS. Em cada escravo há uma
instância do DataNode e é possível ter centenas ou milhares de dispositivos escravos.
Dentro do NameNode, duas estruturas de dados são essenciais: FsImage e EditLog. Na estrutura
FsImage, são armazenadas as informações dos blocos, como a localização das réplicas dos arquivos e o
mapeamento e namespaces dos arquivos e diretórios. O arquivo de log EditLog registra as mudanças nos
metadados após o início dos processamentos.
8.2 Hadoop MapReduce
Dentro do contexto de aumento do compartilhamento de informações que ocorreu com as evoluções
tecnológicas e em redes de computadores e internet, surgiu um modelo de programação para geração
de programação distribuída.
Segundo White (2009), uma tarefa MapReduce é uma unidade de trabalho que um cliente deseja
realizar, considerando os dados de entrada de um programa MapReduce e informações de configuração.
O paradigma de programação MapReduce implementado pelo Hadoop se inspira em duas funções
simples (Map e Reduce). O MapReduce tem como função a realização de análise de dados em larga
escala e está presente em diversas linguagens de programação funcionais.
O MapReduce é definido por um conjunto de bibliotecas que possibilitam processar quantidades
volumosas de dados de forma paralela, com utilização de clusters de computadores. Uma característica
importante do MapReduce é o poder de adaptação para diferentes volumes de dados e variados níveis
de complexidade.
Uma das primeiras linguagens a implementar os conceitos das funções Map e Reduce foi a LISP.
Essas funções podem ser facilmente explicadas de acordo com suas implementações originais, conforme
mostram os exemplos a seguir, em que serão usados pseudocódigos para ilustrar tais funções.
Na função Map, cada nó que atua no processamento aplica a função de mapeamento aos dados
armazenados localmente e salva a saída em um dispositivo de local de armazenamento temporário,
além de existir a garantia que uma cópia dos dados de entrada seja processada.
106
Unidade III
A função Map recebe uma lista como entrada e, aplicando uma função dada, gera uma nova lista
como saída. Uma função simples é aplicar um fator multiplicador a uma lista, por exemplo, dobrando o
valor de cada elemento, como mostrado no código a seguir:
map({1,2,4,8}, (x2)) > {2,4,8,16}
Notemos que todos os elementos da lista de dados foram multiplicados por 2. A cada iteração na
lista de entrada, será gerado um novo elemento da lista de saída. Podemos denominar a função de
mapeamento no exemplo dado como “dobro”. Com isso, a chamada função dobro pode ser expressa como:
map({1,2,4,8}, dobro) > {2,4,8,16}
De forma análoga à função Map, a função Reduce recebe uma lista de entrada e aplica uma função
para que a entrada seja reduzida a um único valor na saída. Algumas funções aritméticas são muito
frequentes na função do tipo Reduce, como “mínimo”, “máximo” e “média”. Aplicando essas funções ao
exemplo temos as seguintes saídas:
reduce({2,4,8,16}, mínimo) > 2
reduce({2,4,8,16}, máximo) > 16
reduce({2,4,8,16}, média) > 7.5
No modelo MapReduce, as funções Map e Reduce são aplicadas conjuntamente e, normalmente,
as saídas geradas pela execução das funções Map são usadas como entrada para as da função
Reduce. Podemos representar a combinação da função Map e Reduce pelo seguinte conjunto de
funções aninhadas:
reduce(map({1,2,4,8}, dobro), mínimo) > 2
reduce(map({1,2,4,8}, dobro), máximo) > 16
reduce(map({1,2,4,8}, dobro), média) > 7.5
O Google aplicou o paradigma MapReduce introduzindo a programação paralela e distribuída. Com
isso, as funções Map e Reduce foram disponibilizadas em bibliotecas C++, Java e Phython tirando a
restrição de programação funcional. Com a retroalimentação explícita dos resultados da função Map,
como entrada para a função Reduce, foram aplicados os conceitos de computação paralela e distribuída.
107
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
A figura a seguir apresenta o Modelo MapReduce implementado pelo Google.
Bloco 0
Bloco 1
Bloco 2
Bloco 3
Bloco 4
Arquivos
de entrada
Arquivos
de saída
Leitura
Escrita
local
Escrita
Fase de
Map
Fase de
Shuffle
Fase de
Reduce
Escravo
Escravo Arquivo
de saída 1
Escravo Arquivo
de saída 2
Escravo
Escravo
Mestre
Programa de
usuário
Leitura remota
Tarefas
Reduce
Tarefas
Map
Replicação
Figura 55 – Modelo MapReduce implementado pelo Google
Adaptada de: Goldman et al. (2012, p. 26).
Para tal, a base de uma aplicação MapReduce consiste em dividir e processar esses dados, com o uso
das funções Map e Reduce. Os blocos dos arquivos de entrada são lidos pelas funções Map, de forma
que os blocos possam ser processados paralelamente em várias máquinas do aglomerado. Na saída das
funções Map são gerados pares chave/valor.
O processamento no Hadoop da aplicação MapReduce apresenta três fases. Na fase inicial, ocorre o
mapeamento dos dados com processamento da função Map. Posteriormente, na fase intermediária, os
dados são resultantes das funções Map que são agrupados e disponibilizados para as tarefas de Reduce.
Por fim, há a fase de redução, na qual são executadas diversas tarefas Reduce para agrupar os valores
comuns e gerar a saída da aplicação.
Os dados de entrada devem estar nas premissas do HDFS e serão divididos em um número de blocos e
gravados no sistema de arquivos. Cada um desses blocos é atribuído a uma tarefa Map. Para distribui‑las,
é utilizado um escalonador que escolhe quais máquinas executarão as tarefas.
Segundo Goldman et al. (2012), cada tarefa Map processa pares de chave/valor durante sua execução.
Após o processamento, a tarefa produz um conjunto intermediário de pares chave/valor. Terminado o
processamento das tarefas Map, os conjuntos que possuem a mesma chave poderão ser agrupados em
uma lista, que contribuirá para que a fase intermediária seja realizada de maneira mais eficiente.
108
Unidade III
Uma das fases intermediárias é a fase de Shuffle, que junta os dados intermediários agrupados
pela chave/valor e produz um conjunto de tuplas (k2, list(v2)). Todos os valores associados a uma certa
chave serão agrupados em uma lista, representando a atividade de particionamento. Ao agrupar chaves
equivalentes, possibilita‑se que os valores possam ser iterados facilmente na tarefa de redução, gerando
a tupla de chave e listando os valores recebidos por ela. Essa fase também é responsável pela divisão e
réplica dos conjuntos de tuplas para as tarefas Reduce, que serão executadas através da atividade de
ordenação. Por fim, os dados são agrupados e depois disponibilizados para a função Reduce.
As funções Reduce são responsáveis por fornecer o resultado final da execução de uma aplicação,
juntando os resultados produzidos por funções Map. Essa composição denota claramente como o
Apache Hadoop tomou proveito das melhores características do Google MapReduce.
Cada tarefa Reduce consome o conjunto de tuplas (k2, lista(v2)) atribuída a ela. Para cada tupla,
uma função definida pelo usuário é chamada e transformando‑a em uma saída formada por uma lista
de pares chave/valor (k3, v3). Dada a organização de forma distribuída, o HDFS espalha as tarefas em
fragmentos pelos nós do aglomerado.
8.2.1 Exemplo de aplicação do MapReduce
Considere uma aplicação de WordCount que conta as palavras de um texto e é uma aplicação
muito utilizada em frameworks de Big Data. Existem diversas aplicações na web que elaboram nuvem
de palavras, ou Word Cloud, que também utilizam o resultado de aplicação WordCount como entrada.
A aplicação WordCount procuracontar o número de ocorrências de cada palavra contida em um
texto colocado como entrada. Assim, a etapa de map receberá os pares de chave/valor compostos pelo
número da linha, com a chave e o texto da linha como valor. Então, a função de map separa o texto em
palavras e gera, na saída, pares de chave/valor compostos pela palavra‑chave e um contador.
Entre as etapas de Map e Reduce, ocorre a operação Shuffle, que será responsável por ordenar as
saídas do map para depois ser entregue à etapa de Reduce. Após copiar os dados de todas as saídas do
map, a função Reduce pode ser iniciada.
As entradas da etapa de reduce são pares de chave/valor compostos pela palavra‑chave e a lista de
valores como valor. A função Reduce realiza a soma dos valores e emite um novo par, com a palavra
como chave e a soma dos valores como valor. Como resultado, teremos a tabela com as frequências de
todas as palavras do texto. A figura a seguir apresenta as etapas da aplicação de WordCount combinando
dois textos simples.
109
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Entrada
entrada1.txt
entrada2.txt
Mapper Shuffle Reducer Saída
CSBS JAI 2012
CSBC 2012 em
Curitiba
(CSBC, 1)
(JAI, 1)
(2012, 1)
(CSBC, 1)
(2012, 1)
(em, 1)
(Curitiba, 1)
Minicurso
Hadoop JAI
2012
CSBC 2012
Curitiba
Paraná
(Minicurso, 1)
(Hadoop, 1)
(JAI, 1)
(2012, 1)
(CSBC, 1)
(2012, 1)
(Curitiba, 1)
(Paraná, 1)
(2012, [2, 2])
(CSBC, [2, 1])
(Curitiba, [1, 1])
(em, 1)
(Hadoop, 1)
(JAI, [1, 1])
(Minicurso, 1)
(Paraná, 1)
(2012, 4)
(CSBC, 3)
(Curitiba, 2)
(em, 1)
(JAI, 2)
(Hadoop, 1)
(Minicurso, 1)
(Paraná, 1)
2012, 4
CSBC, 3
Curitiba, 2
em, 1
JAI, 2
Hadoop, 1
Minicurso, 1
Paraná, 1
Figura 56 – Aplicação WordCount
Fonte: Goldman et al. (2012, p. 33).
Outro software utilizado para analisar os dados do Hadoop, por meio da linguagem SQL, Structured
Query Language, é o software Hive, criado pelo Facebook. O Hive transforma consultas SQL em jobs que
serão executados no cluster do Hadoop. Os dados são organizados em tabelas, permitindo, dessa forma,
definir uma estrutura para os dados armazenados em sistemas de arquivos distribuídos, como o HDFS.
O Hive fornece três interfaces distintas para a conexão dos clientes: Thrift, JDBC e ODBC. A interface
Thrift possibilita a interação com o Hive, usando qualquer linguagem de programação com suporte a
esse protocolo. O ODBC conta com um driver JDBC de tipo 4 (Java puro) para conexão com o servidor
do Hive. O driver utiliza uma implementação do Thrift para Java a fim de se comunicar com o Hive. A
interface ODBC faz com que aplicações com suporte ao protocolo estabeleçam conexão com o Hive.
Saiba mais
O vídeo a seguir mostra um exemplo de aplicação do WordCount para
contagem de palavras dos livros do escritor Machado de Assis.
[HADOOP] – Exemplo MapReduce. 2021. 1 vídeo (16 min). Publicado pelo
canal Felipe Tumenas. Disponível em: https://abrir.link/PmLEW. Acesso em:
4 out. 2024.
110
Unidade III
Resumo
Nesta unidade, apresentamos a Apache, sua estrutura, modos
de operação, o sistema de arquivos distribuídos Hadoop (HDFS) e o
Apache MapReduce.
Compreendemos que para lidar com volumes de dados, variedade de
formatos e velocidade necessária para o armazenamento e processamento
de Big Data, foi desenvolvido o Apache Hadoop. Para isso, o Hadoop
tem ferramentas para armazenar e recuperar grandes volumes de dados
distribuídos e realizar o processamento distribuído. Assim, ele garante
escalabilidade e disponibilidade, possibilitando a extração de conhecimento
útil a partir de análises e cruzamentos desses dados. O Hadoop já é adotado
por grandes corporações, sendo apontado como uma ferramenta poderosa
que apresenta bons resultados.
Por fim, entendemos que o Hadoop MapReduce exemplifica como a
computação distribuída realiza uma sequência de operações distribuídas
em conjuntos de dados. As funções Map usam os blocos dos arquivos inseridos
como entrada, sendo que os blocos podem ser processados paralelamente
em diversos computadores do aglomerado. As funções Map produzem
pares chave/valor na saída. As funções Reduce entregam o resultado
final da execução de uma aplicação, agregando os resultados produzidos
por funções Map.
111
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Exercícios
Questão 1. (Cespe‑Cebraspe 2022, adaptada) Em relação a noções de Big Data, avalie as
afirmativas a seguir.
I – Big Data é qualquer tipo de fonte de dados que apresenta, no mínimo, as seguintes três
características: volume de dados extremamente grande, velocidade de dados extremamente alta
e variedade de dados extremamente ampla.
II – Para que as organizações obtenham os conhecimentos corretos, a tecnologia Big Data não
permite que elas executem as operações de armazenar e administrar as grandes quantidades de
dados de si próprias.
III – Big Data é uma combinação de tecnologias de gestão de dados que evoluíram ao longo dos
anos, razão pela qual não é considerado um mercado único.
É correto o que se afirma em:
A) I, apenas.
B) II, apenas.
C) I e III, apenas.
D) II e III, apenas.
E) I, II e III.
Resposta correta: alternativa C.
Análise das afirmativas
I – Afirmativa correta
Justificativa: as três características mencionadas no texto da afirmativa – volume, velocidade e
variedade – são frequentemente referidas como os “três Vs” do Big Data. Elas são fundamentais para
a definição do conceito. Posteriormente, a definição foi ampliada para “cinco Vs”: volume, velocidade,
variedade, veracidade e valor.
112
Unidade III
II – Afirmativa incorreta.
Justificativa: a tecnologia de Big Data foi desenvolvida exatamente para permitir que as organizações
armazenem, administrem e analisem grandes volumes de dados. Isso ajuda tais organizações a obter
informações valiosas a partir dos dados.
III – Afirmativa correta.
Justificativa: Big Data abrange uma variedade de tecnologias e de ferramentas (como Hadoop, Spark
e NoSQL) que evoluíram de diferentes áreas e não se limitam a um único mercado.
Questão 2. (Instituto Consulplan 2023, adaptada) Dados massivos (Big Data) são grandes grupos
de dados que podem ser capturados, comunicados, agregados, armazenados e analisados. Uma das
plataformas de processamento desse tipo de dado mais conhecida é o Apache Hadoop.
Sobre tal plataforma, avalie as afirmativas a seguir.
I – Trata‑se da implementação mais popular, de código aberto, do MapReduce.
II – É a solução mais adequada para o processamento de arquivos pequenos.
III – Refere‑se a uma plataforma verticalmente escalável e não tolerante a falhas, mas muito utilizada
para o processamento massivo de dados.
É correto o que se afirma em:
A) I, apenas.
B) II, apenas.
C) I e III, apenas.
D) II e III, apenas.
E) I, II e III.
Resposta correta: alternativa A.
113
DESENVOLVIMENTO DE SISTEMAS DISTRIBUÍDOS
Análise das afirmativas
I – Afirmativa correta.
Justificativa: o Apache Hadoop é uma das implementações mais populares do modelo de
programação MapReduce, que é usado para processar grandes volumes de dados de forma distribuída.
Ele é uma plataforma de código aberto, o que significa que qualquer pessoa pode inspecionar, modificar
ou aprimorar seu código‑fonte.
II – Afirmativa incorreta.
Justificativa: o Apache Hadoop é mais eficaz para processar grandes volumes de dados. Dessa forma,
ele não é a melhor solução para arquivos pequenos.
III – Afirmativa incorreta.
Justificativa: o Apache Hadoop é horizontalmente escalável e tolerante a falhas. Isso significa que
ele pode ser expandido adicionando mais nós ao sistema e que é projetado para lidar com falhas de
hardware sem perda de dados.
114
REFERÊNCIAS
Audiovisuais
[HADOOP] – Exemplo MapReduce. 2021. 1 vídeo (16 min). Publicado pelo canal Felipe Tumenas.
Disponível em: https://abrir.link/PmLEW. Acesso em: 04 out. 2024.
Textuais
ABREDES. Aula ao vivo 02 – Modelo TCP/IP & Wireshark básico. ABRedes. Moisés André Nisenbaum,
2 fev. 2021. Disponível em: https://abrir.link/PTjlx. Acesso em: 17 set. 2024.ANSA. The ANSA Reference Manual. Release 01. Cambridge: S‑Print, 1989.
AWS. O que é computação em nuvem. Amazon, 2024. Disponível em: https://abrir.link/bUcdc.
Acesso em: 24 set. 2024.
AWS. O que é SOA (arquitetura orientada a serviços)? Amazon, 2023. Disponível em:
https://abrir.link/ElRkm. Acesso em: 24 set. 2024.
BORDIN, M. V. et al. Processamento paralelo e distribuído. Porto Alegre: Grupo A, 2021.
COMMON object request broker architecture. OMG, 2024. Disponível em: https://tinyurl.com/4sktzfhx.
Acesso em: 3 out. 2024.
COMPONENT object model (COM). Microsoft Learn, 14 jun. 2022. Disponível em: https://abrir.link/WpCzR.
Acesso em: 20 set. 2024.
CONEGLIAN, S.; GONÇALVEZ, P. R.; SEGUNDO, J. E. O profissional da informação na era do Big Data.
Encontros Bibli: revista eletrônica de biblioteconomia e ciência da informação, [s.l.], v. 22, n. 50,
p. 128‑143, 2017. Disponível em: https://tinyurl.com/3w9wv9vr. Acesso em: 23 set. 2024.
CONTENTS of a type library. Microsoft Learn, 31 maio 2018. Disponível em: https://abrir.link/LTxcV.
Acesso em: 20 set. 2024.
COMPONENT object model (COM). In: Open specification. Microsoft, 8 jan. 2023. Disponível em:
https://abrir.link/WpCzR. Acesso em: 3 out. 2024.
COMPONENT object model (COM). Microsoft Learn, 14 jun. 2022. Disponível em: https://abrir.link/WpCzR.
Acesso em: 20 set. 2024.
COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. Sistemas distribuídos. Conceitos e projeto. 5. ed.
Porto Alegre: Bookman, 2007.
115
CUNHA, M. X. C.; SOUZA JÚNIOR, M. F.; DORNELAS, J. S. O uso da arquitetura SOA como estratégia
de integração de sistemas de informação em uma instituição público de ensino. In: SIMPÓSIO DE
EXCELÊNCIA EM GESTÃO E TECNOLOGIA (SEGeT), 2008, Rio de Janeiro. Anais [...]. Rio de Janeiro: AEDB,
2008. Disponível em: https://abrir.link/YftFw. Acesso em: 3 out. 2024.
DAVENPORT, T. H. Big Data no trabalho. São Paulo: Alta Books, 2017.
ERL, T.; FURMANKIEWICZ, E. SOA: princípios de design de serviços. São Paulo: Pearson, 2008.
FOROUZAN, B. A.; MOSHARRAF, F. Redes de computadores. Porto Alegre: AMGH, 2013. E‑book.
Disponível em: https://tinyurl.com/49u5bv9m. Acesso em: 5 out. 2024.
FOROUZAN, B. A.; MOSHARRAF, F. Redes de computadores: uma abordagem top‑down. Porto
Alegre: AMGH, 2013.
GOOGLE Cloud LATAM. Introdução à infraestrutura de Google cloud. Google Cloud LATAM, 3 fev. 2021.
Disponível em: https://abrir.link/UmWne. Acesso em: 17 set. 2024.
GOLDMAN, A. et al. Apache Hadoop: conceitos teóricos e práticos, evolução e novas possibilidades.
In: JORNADAS DE ATUALIZAÇÃO EM INFORMÁTICA (JAI), 31.,/CONGRESSO DA SOCIEDADE
BRASILEIRA DE COMPUTAÇÃO (CSBC), 32., 2012, Curitiba. Anais [...]. Curitiba: JAI/CSBC, 2012.
Disponível em: https://abrir.link/IibVU. Acesso em: 24 set. 2024.
ISO. ISO/IEC 13236: Information Technology – Quality of service – Framework. Genebra:
ISO/OSI/ODP, 1998.
JOSUTTIS, N. M. SOA in practice: the art of distributed system design. California: O´Reilly Media, 2007.
LEE, V.; SCHNEIDER, H.; SCHELL, R. Aplicações móveis: arquitetura, projeto e desenvolvimento.
São Paulo: Pearson, 2005.
MACHADO, F. B.; MAIA, L. P. Arquitetura de sistemas operacionais. 5. ed. Rio de Janeiro: LTC: 2013.
MONTEIRO, E. R. et al. Sistemas distribuídos. Porto Alegre: Grupo A, 2020.
[MS‑DCOM]: Distributed Component Object Model (DCOM) remote protocol. In: Open specification.
Microsoft, 10 nov. 2022. Disponível em: https://abrir.link/hDVoY. Acesso em: 3 out. 2024.
NARDI, A. R. Componentes CORBA. São Paulo: IME (USP), 2003.
RODRIGUES, A. A.; NÓBREGA, E.; DIAS, G. A. Desafios da gestão de dados na era do Big Data: perspectivas
profissionais. Informação & Tecnologia, v. 4, n. 2, p. 63‑79, 2017. Disponível em: https://abrir.link/rKBcs.
Acesso em: 11 set. 2024.
116
RODRIGUES, T. N. et al. Integração de aplicações. Porto Alegre: Grupo A, 2020.
SANTOS, D. B. L. Fundamentos de bancos de dados. Belo Horizonte: IGTI, 2022.
SANTOS, R. R. et al. Fundamentos de Big Data. Porto Alegre: Grupo A, 2021.
SILVA, M. B. F. Ferramentas de gerenciamento. São Paulo: Sol, 2018.
SILVA, M. B. F. Sistemas distribuídos. São Paulo: Sol, 2024.
SIMPLE Object Access Protocol (SOAP) 1.1. W3C, maio 2000. Disponível em: https://abrir.link/Jxvfi.
Acesso em: 13 set. 2024.
SOBRE os data centers do Google. Google, [s.d.]. Disponível em: https://abrir.link/hIgCA.
Acesso em: 17 set. 2024.
SRINIVASAN, R. RPC: Remote Procedure Call Protocol Specification Version 2. Internet RFC 1831. 1995.
TANENBAUM, A. S.; STEEN, M. V. Sistemas distribuídos: princípios e paradigmas. 2. ed. São Paulo:
Prentice Hall Brasil, 2007.
TANENBAUM, A. S.; STEEN, M. V. Distributed Systems. 4. ed. New Jersey: Maarten van Steen, 2023.
THUSOO, A. et al. Hive – a petabyte scale data warehouse using adoop. ICDE, 2010, p. 996‑1005.
Disponível em: https://abrir.link/jaEso. Acesso em: 24 set. 2024.
WEB services. UFRJ, [s.d.]. Disponível em: https://abrir.link/prNdP. Acesso em: 24 set. 2024.
WHITE, S. et al. Os arquivos IDL e ACF. Microsoft Learn, 13 jun. 2023b. Disponível em:
https://abrir.link/ECWTG. Acesso em: 20 set. 2024.
WHITE, S. et al. Arquivos gerados para uma interface COM. Microsoft Learn, 13 jun. 2023a.
Disponível em: https://abrir.link/LjtkS. Acesso em: 20 set. 2024.
WHITE, S.; SATRAN, M. Arquivos gerados para uma interface RPC. Microsoft Learn, 12 jun. 2023b.
Disponível em: https://abrir.link/QHnQh. Acesso em: 20 set. 2024.
WHITE, S.; SATRAN, M. Procedimento de build geral. Microsoft Learn, 13 jun. 2023a. Disponível em:
https://abrir.link/HpPmU. Acesso em: 20 set. 2024.
WHITE, T. Hadoop the definitive guide: storage and analysis at internet scale. California: O´Reilly, 2009.
117
118
119
120
Informações:
www.sepi.unip.br ou 0800 010 9000