HADOOP DISTRIBUTED FILE BIG DATA SYSTEM -
HDFS – Sistema de arquivos distribuído –
Executado em um sistema de arquivos nativo
– Otimizado para processamento de grande
volume de dados (alta taxa de transferência) –
Abstrai questões de armazenamento
distribuído dos dados – Escalável e tolerante a
falhas
O Hadoop… … é um framework open source
desenvolvido em Java … é projetado para
manipular grande volume de dados … é
projetado para ser escalável em milhares de
máquinas … é projetado para ser executado
em hardware de baixo custo … oferece
resiliência por meio da replicação de dados …
oferece recuperação automática do processo
em caso de falha … faz distribuição
automática dos dados no cluster … projetado
para levar o processamento para o dado
Dicas para adoção do Hadoop • Faça uma
expansão do cluster na medida em que novas
aplicações de interesse forem identificadas •
Construa uma plataforma centralizada dos dados
• Propague o conhecimento de Hadoop e NoSQL
com outros grupos • Dê ao seu time tempo para
fazer experimentos • Planeje a existência de
aplicações novas, tradicionais e legadas
Cluster Hadoop
Agrupa vários Racks
Rack Hadoop
Comporta vários nós
Nó Hadoop
Comporta Processos
Hadoop, JVM, LInux, CPU,
Memória, Disco
Rack 01
NameNode - NN
Rack 02
SecondaryNameNode - SNN
Rack 03
DataNode
Arquivos são divididos em blocos
de 64 MB (tamanho default)
Otimizado para ler/armazenar
grandes arquivos em um cluster
Blocos são replicados para tolerância
a falhas (default - 3 réplicas)
Opções para
carregamento de dados
para o HDFS
LInha de comando
Java Api
Ecosistema Hadoop , Sqoop, Flume, Hue
Modos de execução
• Local (standalone) – Executado como um
único processo java – Recomendado para
depuração de código
Pseudo-distribuído – Todos os componentes Hadoop são
executados em uma única máquina – Cada componente é
executado em um processo java separado
Completamente distribuído – Cluster Hadoop utilizando
múltiplas máquinas
O que é necessário
implementar em uma
aplicação distribuída?
Implementado pelo
desenvolvedor
Lógica do Problema
Implementado
pelo
MapReduce
Alocação de máquinas
Escalonamento de tarefas
Balanceamento de carga
Comunicação entre máquinas
Tolerância a falhas
Escalabilidade
Arcabouço de software
para facilitar a execução
de aplicações que
processam um grande
volume de dados em um
cluster de milhares de
nós de hardware
convencional de maneira
tolerante a falhas.
1. Paradigma de programação
distribuída 2. Engine de
execução de aplicações
distribuídas 3. Implementado
em Java 4. Executa programas
implementados em Java,
Python, Ruby e C++
Arquitetura
JobTracker JT
• Nó mestre •
Gerenciador de
tarefas
MapReduce
TaskTracker TT
• Executam as
tarefas MapReduce
JOB Um programa completo Uma
aplicação
TAREFA Execução de um Mapper ou
Reducer sobre uma fatia dos dados
Mova as tarefas, não os dados 1. Uma
aplicação cliente submete um job ao
JobTracker 2. JobTracker se comunica com o
NameNode para determinar a localização
dos dados 3. JobTracker localiza os nós
TaskTrackers próximos aos dados 4.
JobTracker submete as tarefas aos nós
TaskTrackers
Tolerância a falhas 1. Em um
grande cluster, as máquinas
ficam lentas ou falham com
frequência 2. MapReduce
oferece recuperação
automática de tarefas que
falharam 3. MapReduce
redireciona tarefas falhas para
outros nós do cluster
Escalabilidade linear “Escalabilidade é a
capacidade do sistema de manter o desempenho
com o aumento de carga, pela adição de mais
recursos
Modelo de Programação
Exemplo tradicional do MapReduce:
WordCount Dados de entrada: um ou
mais arquivos de texto Objetivo: contar
o número de ocorrências de cada
palavra encontrada no texto Resultado:
arquivo texto contendo uma lista em
que cada linha apresenta uma palavra e
seu respectivo número de ocorrências
Exemplo de aplicabilidade: trending
topics do Twitter
DAdos de entrada
Split dos dados
Tarefas Map
Ordenação
Tarefas Reduce
Dados saída
Exemplos de análises utilizando
o modelo de programação
MapReduce
Mineração de Texto
Filtragem colaborativa
Modelos preditivos
Reconhecimentos de Padroes
Análise de
sentimento
Análise de
risco
Responsabilidade do desenvolvedor
MapReduce Job
Chaves e Valores
Classe reducer
Classe mapper
Classe driver
Exemplos de chaves e valores Um número
de telefone (chave) com os registros das
chamadas (valores) Um usuário do
facebook (chave) e suas informações do
perfil (valores) O número de um cartão de
crédito (chave) e suas transações (valores)
Funcoes Map e Reduce
Classe Mapper
Classe Reducer
Chamada de um
MapReduce job -
Exemplo
bin/hadoop jar
/home/fia/meuwordcount.jar
WordCount
dados_entrada
dados_saida
Classe Driver
Como utilizar as classes implementadas?
1. Gerar um arquivo JAR com as classes
implementadas 2. Submeter o JAR por
meio da função “hadoop jar” JAR (Java
ARchive) é um arquivo compactado
usado para distribuir um conjunto de
classes Java. É usado para armazenar
classes compiladas e metadados
associados que podem constituir um
programa.
Mas como gerar uma
aplicação MapReduce
utilizando outras
linguagens de
programação?
Hadoop Streaming API – Permite a execução de tarefas map e
reduce com diversas linguagens (desde que a linguagem possa ler o
input e output padrão) – A entrada dos dados são recebidas do stdin
– A saída dos dados são gravadas no stdout – A execução é oferecida
por meio do componente hadoop-streaming.jar
Hadoop Streaming API – Exemplo
bin/hadoop jar
/usr/local/hadoop/hadoop-streaming.jar \
-input "/user/dados_entrada.txt" \ -output
"/user/out" \ -mapper "meuMapper.py" \
-reducer "meuReducer.py"
quais outras
aplicações poderiam
ser feitas a partir
dessa base de dados?
• Análise de sentimento •
Identificação de pandemias •
Comparação entre marcas •
Identificação de usuários
influentes