Processando Big Data com Java: Receitas para resolver problemas comuns. Fabiane Bizinella Nardon (@fabianenardon)



Documentos relacionados
Processamento de Big Data com bancos de dados NoSQL para desenvolvedores Java. Fernando Babadopulos

Fazendo Data Science em Tempo Real. Fabiane Bizinella

Arquiteturas Java Pragmá1cas para usar Big Data na Nuvem. Fabiane Bizinella Nardon Fernando Babadopulos

Hadoop - HDFS. Universidade Federal de Goiás Ciência da Computação

Análises Geração RI (representação intermediária) Código Intermediário

Armazenamento Secundário. SCE-183 Algoritmos e Estruturas de Dados II

NoSQL como suporte à análise de dados nãonormalizados. volume

Armazenando grandes quantidades de dados

2 echo "PHP e outros.";

BIG DATA: UTILIZANDO A INTERNET PARA TOMADA DE DECISÕES

Tabela de símbolos: tabelas de espalhamento

Lab 2 MapReduce e o Console Web

MANUAL DE PADRONIZAÇÃO DE CODIFICAÇÃO PHP CODING STANDARDS

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Arquiteturas escaláveis utilizando ferramentas Shared Nothing. Victor Canô

Adicionando Propriedades e Funcionalidades aos Componentes Parte II

Projeto Simple Maps. Quarto semestre de ADS. Professor: Fabrício J. Barth

Introdução a Informática. Prof.: Roberto Franciscatto

*O RDBMS Oracle é um sistema de gerenciamento de banco de dados relacional.

NOVO MODELO DE ATUALIZAÇÃO FOCCO Atualização automática com o FoccoUPDATE

Solicitação de Manutenção de Veículo. Manual SRM

Análise de Big Data Streams

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Mini Curso DESCOMPLICANDO C# Professor Hélio

Por dentro do Windows: Gerenciamento de Memória

Fundamentos de Sistemas Operacionais

FTP FILE F TRANSFER PROTOCOL. Tópicos

Roteiro do Programa e Entrada/Saída

UFRJ IM - DCC. Sistemas Operacionais I. Unidade I Introdução. 11/02/2014 Prof. Valeria M. Bastos

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

A Plataforma para uma Nova Era. Copyright 2013 EMC Corporation. Todos os direitos reservados.

EEP SENAC PELOTAS CENTRO HISTÓRICO PRONATEC/TURMA 2 PROFESSOR: NATANIEL VIEIRA DISCIPLINA: SEGURANÇA DE REDES AVIRA ANTIVIRUS

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

LSOF - LiSt Open Files

UFRJ IM - DCC. Sistemas Operacionais I

Unidade IV: Ponteiros, Referências e Arrays

Projeto Físico e Lógico de Redes de Processamento. Kleber A. Ribeiro

Recursos para uma Governança de

PERFORMANCE EVALUATION OF A MONGODB AND HADOOP PLATFORM FOR SCIENTIFIC DATA ANALYSIS M.Govindaraju and L. Ramakrishnan

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP;

2.3. PHP Tipos de dados e operadores

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Procedimentos armazenados

POO Programação Orientada a Objetos. Classes em Java

Exercícios de revisão V2. FAT: 300 GB / 2KB = 150MB X 8 bytes (64 bits / 8) = 1.2GB

Webstore Reloaded. A arquitetura do walmart.com.br remodelada

Sistemas Operacionais. Prof. André Y. Kusumoto

Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

O comando switch. c Professores de ALPRO I 04/2012. Faculdade de Informática PUCRS. ALPRO I (FACIN) O comando switch 04/ / 31

Prof.: Roberto Franciscatto. Capítulo 1 Introdução

Como funciona a plataforma Superlógica? - Livro 4 de 4. Como funciona a interface de integração? Como você poderá complementar o sistema?

Universidade Federal de Minas Gerais. Sistemas Operacionais. Aula 23. Sistemas Operacionais Distribuídos

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Prof. Sandrina Correia

Tutorial Por : André Luiz Ribeiro Breviglieri -=FaT_tUx=- BrazilFW Instalação

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Sistemas Operacionais

Programação Orientada a Objetos. Pacotes e CLASSPATH: Definifdo e Usando Pacotes

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

5. Generics, Iterators e Comparable em Java. Tipos de Dados Abstractos Generics em Java

Building and Retaining the High Performance Workforce

Sistemas de Arquivos. Gerenciamento de Espaço em Disco

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS - COMO MONETIZAR O APP MOBILE. Prof. Angelo Augusto Frozza, M.Sc.

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Python: Comandos Básicos. Claudio Esperança

Estruturas do Sistema de Computação

DEFINIÇÃO DE MÉTODOS

Como padronizar as suas routerboards e atualiza-las todas ao mesmo tempo?

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Repeater no GASweb. Regiões

Para inicializar o Cambridge LMS - Estudantes

Sistemas Operacionais. Conceitos de um Sistema Operacional

Processamento de Dados

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ASP.NET

Organização e Arquitetura de Computadores

Problemas de Performance Rio. Parte 1 - Agosto/2013

Tempo de Resposta em Sub-Segundos com o novo MicroStrategy 10 In-Memory Analytics. Anderson Santos, Sales Engineer Brazil

São Paulo. Maio/2015

AULA 5 Sistemas Operacionais

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Componentes de um Sistema de Computador

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Rafael Santos. Instituto Nacional de Pesquisas Espaciais rafael.santos. Rafael Santos - rafael.

Tipos Menos Comuns de Travamento de Sistema

2 Orientação a objetos na prática

Transformação entre o SAD 69 e o SIRGAS2000 no ArcGIS

Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010

Capítulo 07: Câmera e Arquivos

Curso de Data Mining

Programação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho

Linguagem de Programação III Aula 2 Revisão Parte II

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

Gerenciamento de memória virtual no Kernel Linux conceitos básicos

Boas Práticas em Sistemas Web muito além do HTML...

- BIOS - Ligando o PC pela primeira vez - Configurando o BIOS pelo Setup

Transcrição:

Processando Big Data com Java: Receitas para resolver problemas comuns Fabiane Bizinella Nardon (@fabianenardon)

The best minds of my genera3on are thinking about how to make people click ads. That sucks. Jeff Hammerbacher

Big Data em Publicidade Nossos Números Dados imensos Métricas para medir eficiência 1.5 bilhões novos registros/dia 50% aumento de CTR Resposta rápida RTB precisa retorno em 100ms

BIG DATA em Java HADOOP HDFS SPARK STORM

PROCESSAMENTO PARALELO E DISTRIBUÍDO INPUT M1 M2 M3 M4 M5 OUTPUT

Mais paralelismo pode deixar sua aplicação mais lenta

UID:1 = FUTEBOL, CINEMA, TECNOLOGIA UID2 = MODA, TECNOLOGIA M1 M2 M3 M4 M5 FUTEBOL: 1 CINEMA: 1 TECNOLOGIA: 2 MODA: 1

UID:1 = FUTEBOL, CINEMA, TECNOLOGIA UID2 = MODA, TECNOLOGIA M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 FUTEBOL: 1 CINEMA: 1 TECNOLOGIA: 2 MODA: 1 ~10h

UID:1 = FUTEBOL, CINEMA, TECNOLOGIA UID2 = MODA, TECNOLOGIA M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M20 M21 M22 M23 M24 M25 M26 M27 M28 M29 M30 FUTEBOL: 1 CINEMA: 1 TECNOLOGIA: 2 MODA: 1 ~36h

UID:1 = FUTEBOL, CINEMA, TECNOLOGIA UID2 = MODA, TECNOLOGIA M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M20 M21 M22 M23 M24 M25 M26 M27 M28 M29 M30 FUTEBOL: 1 CINEMA: 1 TECNOLOGIA: 2 MODA: 1 ~36h

Hadoop Fair Scheduler conf/mapred- site.xml <property> <name>mapred.jobtracker.taskscheduler</name> <value>org.apache.hadoop.mapred.fairscheduler</value> </property> <alloca^ons>... <pool name="smallpool"> <maxmaps>10</maxmaps> </pool>... </alloca^ons> conf/fair- scheduler.xml Código config.set("mapred.fairscheduler.pool", "smallpool");

PROCESSAMENTO PARALELO E DISTRIBUÍDO DADOS M1 M2 M3 M4 M5

PROCESSAMENTO PARALELO E DISTRIBUÍDO DADOS CACHE CACHE CACHE M1 M2 M3 M4 M5

Cache distribuído tem que ser bem distribuído

SHARDING CACHE C A CACHE C H E CACHE 1 2 3 4 5 CLIENTE CLIENTE CLIENTE

SHARDING Com Hashing (Ex: Murmur) CACHE 5 1 a1d1c1 a2b2c3 a2b2c4 CLIENTE CACHE 2 a2b2c4 CLIENTE CACHE 3 4 a2f2c4 b2f2c4 CLIENTE

SHARDING Escalando CACHE CACHE CLIENTE CACHE CACHE CLIENTE CACHE CACHE CLIENTE

SHARDING Escalando CACHE CACHE CLIENTE CACHE CLIENTE CACHE CACHE CLIENTE CACHE

PIPELINES Processo 1 Processo 2 Processo 3 Saída 1 Saída 2

Às vezes, a inteligência do seu framework não vai te dar o melhor pipeline

BANCO DE DADOS CONTA NÚMERO DE USUÁRIOS POR INTERESSES CONTA NÚMERO DE USUÁRIOS POR PAÍS CONTA NÚMERO DE USUÁRIOS POR IDADE GRAVA TOTAL NO BD GRAVA TOTAL NO BD GRAVA TOTAL NO BD

Cache Intermediário PCollection<RedisRecord> users = pipeline.read(source); PCollection<Tuple3<String, String, Integer>> globalstats = users.paralleldo("count global cookies", new CountCookies(properties), Writables.triples(Writables.strings(), Writables.strings(), Writables.ints())); pipeline.cache(globalstats, CachingOptions.builder().useDisk(true).useMemory(false).replicas(1).deserialized(true).build()); pipeline.run(); PTable<String, Integer> statsbyinterest = globalstats.paralleldo( "Cookies by interest", new CountCookiesByInterest(), Writables.tableOf(Writables.strings(), Writables.ints())); PGroupedTable<String, Integer> groupedbyinterest = statsbyinterest.groupbykey(1);

QUE TAMANHO É BIG DATA? * Tamanho default to bloco do HDFS é 64MB * Se o arquivo é muito pequeno, o tempo para iniciar/terminar um job será maior que o job em si * Se os dados cabem em memória, fazer um POJP vai ser muito mais rápido

É melhor processar um arquivo grande. E isso é um problema.

Arquivos Pequenos: Se puder evitar, não processe Alterna^va: Concatene no HDFS Se puder concatenar no file system e depois mandar para o HDFS, melhor ainda!

Mandando arquivão para o HDFS hadoop fs put /arq.log /hdfsfolder Isso não é atômico! Use: hadoop fs put /arq.log /hdfsfolder/.arq.log hadoop fs -mv /hdfsfolder/.arq.log /hdfsfolder/arq.log

Quando processar um arquivo grande é um problema ARQUIVO ENTRADA Contador Contador Contador Contador Total

Quando processar um arquivo grande é um problema 500 GB Contador Contador Contador 7.800 Maps Total

Quando processar um arquivo grande é um problema 500 GB config.setlong( RuntimeParameters.COMBINE_FILE_BLOCK_SIZE, 6_710_886_400L); Contador Contador Contador 7.800 Maps Total

Muitas vezes, se você não processar todos os dados, dá na mesma

Usuários por Interesse (TODOS) FUTEBOL EMPREGO FINANÇAS POLÍTICA

Usuários por Interesse (1%) FUTEBOL EMPREGO FINANÇAS POLÍTICA

Usuários por Interesse TODOS 1%

Como fazer uma boa amostra Tamanho tem que ser representa^vo Distribuição tem que ser homogênea

Tamanho da Amostra MAIOR AMOSTRA = MAIS ACURÁCIA

Tamanho da Amostra Defina tamanho mínimo da amostra. Se a base ^ver menos que isso, use a base toda

Distribuição da Amostra (Ex: Redis) SHARDING 1 SHARDING 2 SHARDING 3 RANDOMKEYs RANDOMKEYs RANDOMKEYs ITEMS POR SHARDING = TAMANHO DA AMOSTRA / NÚMERO DE SHARDINGS

Distribuição da Amostra (Ex: Redis) Ta = Tamanho da Amostra SHARDING 1 SHARDING 2 SHARDING 3 Tt = Tamanho Total Na = Número de Itens na Amostra Nt = Número de Itens Total Nt = Na * Tt / Ta RANDOMKEYs Exemplo: RANDOMKEYs RANDOMKEYs Ta = 1000 ITEMS POR SHARDING = TAMANHO Tt DA = 100.000 AMOSTRA / NÚMERO DE SHARDINGS Na = 400 Mulheres Nt = 400 * 100.000 / 1000 = 40.000

E quando não se sabe o tamanho total? Reservoir Sampling 1 2 3 4 5 A B C D E F Random (0..1): 0.7 K = Ta / i K = 5 / 6 = 0.83 Se K > Random => TROCA!

Reservoir Sampling Distribuído A B C D E F G H I J K L M N O P Q R S T U V X Y W Z 1 2 3 4 5

Reservoir Sampling Distribuído A B C D E F G H I J K L M N O P Q R S T U V X Y W Z 1 2 3 4 5

Reservoir Sampling Distribuído A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76 J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23 S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y: 0.23 W:0.3 Z:0.76 private SortedMap<Double, MyObject> reservoir;... if (reservoir.size() < SAMPLE_SIZE) { reservoir.put(score, myobject); } else if (score > reservoir.firstkey()) { reservoir.remove(reservoir.firstkey()); reservoir.put(score, myobject); } 1 2 3 4 5

Reservoir Sampling Distribuído A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76 J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23 S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y: 0.23 W:0.3 Z:0.76 H:0.6 D:0.7 E:0.9 F:0.11 I:0.76 R:0.23 Q:0.32 O:0.33 L:0.54 P:0.56 S:0.21 U:0.22 Y:0.23 T:0.32 Z:0.76 COMBINER 1 2 3 4 5 O L P I Z

Reservoir Sampling Distribuído Apache Crunch: import org.apache.crunch.lib.sample; Sample.reservoirSample(PCollection<T> input, int samplesize)

Processando Big Data com Java: Receitas para resolver problemas comuns Fabiane Bizinella Nardon (@fabianenardon) h}p://www.tailtarget.com/vagas/