46. QUAL O NOSSO DESAFIO?
Dados contidos em múltiplos sistemas
Que são frequentemente armazenados em
diferentes formatos
E idealmente ter uma fonte da verdade, de
onde derivar os dados
46
47. Pense em um datamart como uma loja de garrafas
de água: limpa, embalada e organizada para fácil
consumo; o lago de dados é um grande corpo de
água em um estado mais natural.
O conteúdo do lago de dados flui de uma fonte
para preencher o lago, e vários usuários podem
vir examinar, mergulhar ou pegar amostras.
James Dixon, CTO of Pentaho
47
48. An Enterprise Data Lake is an immutable data store of
largely un-processed “raw” data, acting as a source for other
processing streams but also made directly available to a
significant number of internal, technical consumers using some
efficient processing engine. Examples include HDFS or HBase
within a Hadoop, Spark or Storm processing framework. We
can contrast this with a typical system that collects raw data
into some highly restricted space that is only made available to
these consumers as the end result of a highly controlled ETL
process.
ThoughtWorks Tech Radar
48
49. PROPRIEDADES DE DATA LAKES
A ingestão dos dados deve ser "push based", ou seja, os
dados devem ser "empurrados" para o sistema ao invés
de serem ingeridos periodicamente através de
processamentos em lote
Os dados ingeridos devem ser armazenados na sua
forma mais pura
A solução deve ser escalável horizontalmente, em termos
de capacidade de armazenamento e processamento
Não serve ao usuário final, mas sim a usuários técnicos
49
50. OBJETIVOS DO DATA LAKE
Reduzir o custo da ingestão de novos tipos de dados
Diminuir o tempo que leva para que atualizações nos
sistemas operacionais cheguem até os sistemas
analíticos
Permitir o processamento de volumes de dados bem
maiores que os sistemas de DW tradicionais
50
51. OBJETIVOS DO DATA LAKE
Eliminar gargalos devido à falta de desenvolvedores
especializados em ETL ou à excessivo up front
design do modelo de dados
Empoderar desenvolvedores a criarem seus
próprios pipelines de processamento de dados de
uma maneira ágil — quando for preciso e da forma
que for preciso — dentro de limites razoáveis
51
61. ||-ISMO DE DADOS
Foco em distribuir os dados através de diferentes
nós de computação paralela
Cada processador executa a mesma tarefa em
diferentes fatias de dados distribuídos
Enfatiza a natureza distribuída dos dados, em
oposição ao processamento
61
62. EXEMPLO
define foo(array d)
if CPU = "a"
lower_limit := 1
upper_limit := round(d.length/2)
else if CPU = "b"
lower_limit := round(d.length/2) + 1
upper_limit := d.length
for i from lower_limit to upper_limit by 1
do_something_with(d[i])
end
62
63. EXEMPLO
define foo(array d)
if CPU = "a"
lower_limit := 1
upper_limit := round(d.length/2)
else if CPU = "b"
lower_limit := round(d.length/2) + 1
upper_limit := d.length
for i from lower_limit to upper_limit by 1
do_something_with(d[i])
end
63
Acoplamento do código ao número de CPUs da máquina
Você precisa se preocupar em como dividir os
dados através dos diferentes nós de computação
Você precisa se preocupar explicitamente em como
acumular e consolidar a saída final a partir das
computações em paralelo
64. COMO UM DESENVOLVEDOR…
Eu quero escrever meu código de tal maneira
que ele possa ser executado em paralelo
Eu não quero escrever código baseado em quantas
CPUs/máquinas tenho disponíveis no data center
Eu não quero me preocupar em como os dados de
entrada devem ser divididos para a execução em
paralelo
Eu não quero me preocupar em como a saída final
deve ser acumulada e consolidada a partir das
unidades rodando em paralelo
64
69. HADOOP
Framework para armazenamento e computação
distribuída para processamento de dados em larga
escala
Não impõe restrição aos formatos dos dados sendo
processados
Projeto da Apache Software Foundation
Implementado em Java, suportado em todas as
plataformas *nix, Windows
Objetivo: computação/armazenamento linearmente
escalável usando hardware comum
69
71. HDFS
Sistema de arquivos distribuído
Cada arquivo pode estar espalhado por múltiplos nós
Clientes podem acessar arquivos de qualquer nó, como se fosse local
Tolerância a falhas e alta disponibilidade
APIs
Java/Scala
Shell HDFS suporta vários comandos
Interface web para navegar pelo sistema de arquivos
71
72. HDFS: PRINCIPAIS CONCEITOS
Sistema de arquivos hierárquico - similar a Unix/Linux
Metadados de arquivos e diretórios
nome, owner, group owner, permissões, status
Arquivos divididos em blocos, que são distribuídos
72
74. PARA QUE CENÁRIOS HDFS NÃO É TÃO BOM ASSIM?
Aplicações de baixa latência
Muitos arquivos pequenos
Acesso aleatório
Updates de dados
Algoritmos iterativos
74
80. PONTOS DE DOR COM MAPREDUCE
Latência
Limitado a fases de Map e Reduce
Não é trivial testar…
Pode resultar em fluxos complexos
Reuso de dados requer escrita no HDFS
80
81. O QUE É APACHE SPARK?
Cluster Computing Engine
Abstrai o armazenamento e gerenciamento do cluster
Interface de dados unificada
Modelo de programação fácil
API em Scala, Python, Java, R
81
86. EXEMPLO DE CONTADOR DE PALAVRAS
val file = sparkContext.textFile("input path")
val counts = file.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey((a, b) => a + b)
counts.saveAsTextFile("destination path")
86
88. RDD: RESILIENT DISTRIBUTED DATASET
Coleção de objetos somente leitura
Particionados através de um conjunto de
máquinas
Podem ser reconstruídos caso uma das partições
seja perdida
Pode ser reutilizado
Pode ser cacheado em memória
88
89. RDD: RESILIENT DISTRIBUTED DATASET
Lazily evaluated
Proporciona um reuso de dados eficiente
Várias operações para processamento de dados
89
90. Conjunto de partições (“splits”)
+
Lista de dependências de outros RDDs
+
Função para computar uma partição, dadas
suas dependências
90
INTERFACE DOS RDDS
91. Transformações
Retorna um novo RDD com a transformação aplicada
Lazy
Podem ser encadeadas
Ações
Executam o DAG de transformações
91
OPERAÇÕES COM RDDS
96. SHUFFLE NÃO É OBRIGATÓRIO
Programas não ficam limitados a fases de
map e reduce
Shuffle e sort não são mais obrigatórios
entre fases
96
97. IO REDUZIDO
Não é necessário IO de disco entre fases,
devido ao pipeline de operações
Não há IO de rede a não ser que um shuffle
seja necessário
97
98. CACHEAMENTO DE DADOS EM MEMÓRIA
Cache opcional em memória
Engine do DAG pode aplicar otimizações, já que
quando uma ação é chamada ele sabe todas as
transformações a aplicar
98