MapReduce. Capítulo 2. Renato Gomes Borges Júnior

Documentos relacionados
+ Problema Típico de Big Data

Programação em Sistemas Distribuídos MEI-MI-MSI 2015/16. MapReduce: Hadoop. Prof. António Casimiro. MapReduce

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

AVALIAÇÃO DE DESEMPENHO DE PROCESSAMENTO DISTRIBUÍDO EM LARGA ESCALA COM HADOOP

Processando dados com

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Tratamento de Exceções

Tratamento de Exceções

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Processamento de Dados Massivos (Big-Data) com Spark. Vinícius Dias Orientador: Dorgival Guedes

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Simulado de Linguagem de Programação Java

Análise de Programação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

JAVA. Professor: Bruno Toledo

PrIntCloud. Disciplina: Procedência de Dados e Data Warehousing. Aluna: Shermila Guerra Santa Cruz. 16/04/13

Aula 4. TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2014 Marcelo Henrique dos Santos -

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Programação de Computadores II TCC /Turma A 1

4 TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Processamento de INDUSTRIA 4.0. Big Data. Aula #10 - Processamento distribuído de dados FONTE: DELIRIUM CAFE EDUARDO CUNHA DE ALMEIDA

Linguagem de Programação II Implementação

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

Linguagens de Programação Classificação

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

CETEC Centro Paula Souza

Capítulo 6: Linguagens de Programação

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Lógica de Programação e Algoritmos com exemplos na linguagem JAVA

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Instituto Superior de Engenharia de Lisboa

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Programação Estruturada e Orientada a Objetos

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

Tratamento de Exceções em Java

Dada a linguagem, números romanos, construir uma representação para a gramática dela junto com um interpretador para essa gramática.

Linguagem de Programação II Importando Classes/Pacotes

Tipos, Literais, Operadores

Tipos, Literais, Operadores

ach 2147 desenvolvimento de sistemas de informação distribuídos

Funcionamento e Recursos

Introdução à Programação

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Estruturas de controle Parte 1

Programação de Computadores II

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Informática Parte 10 Prof. Márcio Hunecke

Lógica de Programação e Algoritmos

Array em Java. Figura 1 - Exemplo de um array de inteiros

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Big Data Open Source com Hadoop

SISTEMAS DISTRIBUÍDOS

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

3. Linguagem de Programação C

Teste Automatizado POO. Prof. Marcio Delamaro

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Fundamentos de Programação 1

Polimorfismo. O que é polimorfismo?

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Sistemas Operacionais

PROGRAMAÇÃO I A LINGUAGEM DE PROGRAMAÇÃO JAVA II

Módulo 5. Programação Orientada a Objetos. Programação Orientada a Objetos I Java (Rone Ilídio)

Aula 3: Algoritmos: Formalização e Construção

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

ESQUEMA AULA PRÁTICA 1

Desenvolvendo aplicações Java

Arquivos continuação. Profa. Thienne Johnson EACH/USP

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Lição 4 Fundamentos da programação

Uma introdução ao Apache Hama

ESQUEMA AULA PRÁTICA 1

Programação Orientada a Objetos

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

PROGRAMAÇÃO JAVA. Parte 3

Ambiente de Programação JAVA POO

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Sintaxe Básica de Java Parte 2

Recursividade. Objetivos do módulo. O que é recursividade

Algoritmos Computacionais

MsC. João Maria MsC. Liviane Melo

Exceções. Criando suas exceções

Algoritmos II prof. Daniel Oliveira

Strings e Arrays POO

Lição 7 Array em Java

Transcrição:

MapReduce Capítulo 2 Renato Gomes Borges Júnior

Sumário Introdução Exemplo: um conjunto de dados climáticos Analisando os dados Map and Reduce Java MapReduce Fluxo de dados Executando MapReduce distribuído Hadoop streaming

Introdução Modelo de programação para processamento de dados. Inerentemente paralelo. Análise de dados de larga escala.

Exemplo: um conjunto de dados climáticos Sensores climáticos coletando dados a cada hora em muitos locais do globo geram grande quantidade de dados. Bom candidato para análise com MapReduce pois: semi-estruturado; orientado a registros. Dados são armazenados usando um formato ASCII. Cada linha é um registro.

Exemplo: um conjunto de dados climáticos 0057 332130 # USAF weather station identifier 99999 # WBAN weather station identifier 19500101 # observation date 0300 # observation time 4 +51317 # latitude (degrees x 1000) +028783 # longitude (degrees x 1000) FM-12 +0171 # elevation (meters) 99999 V020 320 # wind direction (degrees) 1 # quality code N 0072 1 00450 # sky ceiling height (meters) 1 # quality code C N 010000 # visibility distance (meters) 1 # quality code N 9 0128 # air temperature (degrees Celsius x 10) 1 # quality code -0139 # dew point temperature (degrees Celsius x 10) 1 # quality code 10268 1 00450 # sky ceiling height (meters) 1 # quality code C N 010000 # visibility distance (meters) 1 # quality code N 9-0128 # air temperature (degrees Celsius x 10) 1 # quality code -0139 # dew point temperature (degrees Celsius x 10) 1 # quality code 10268 # atmospheric pressure (hectopascals x 10) 1 # quality code Registro dividido em múltiplas linhas para mostrar o que cada campo representa.

Exemplo: um conjunto de dados climáticos Cada arquivo armazena as leituras de um único ano. Exemplo de um arquivo (algumas colunas foram retiradas): 0067011990999991950051507004...9999999N9+00001+99999999999... 0043011990999991950051512004...9999999N9+00221+99999999999... 0043011990999991950051518004...9999999N9-00111+99999999999... Estamos interessados em encontrar a maior temperatura para cada ano.

Exemplo: um conjunto de dados climáticos Cada arquivo armazena as leituras de um único ano. Exemplo de um arquivo (algumas colunas foram retiradas): 0067011990999991950051507004...9999999N9+00001+99999999999... 0043011990999991950051512004...9999999N9+00221+99999999999... 0043011990999991950051518004...9999999N9-00111+99999999999... Estamos interessados em encontrar a maior temperatura para cada ano.

Para tirar vantagem do processamento paralelo do Hadoop é necessário expressar nossa busca como uma função MapReduce. Analisando os dados Usando ferramentas Unix para processar os dados (de forma serial), o processamento completo para o século levou 42 minutos. Alocando cada ano para um processo diferente ainda leva tempo, pois o tamanho dos arquivos variam muito. A melhor abordagem é dividir a entrada em partes de tamanho fixo e alocar cada uma para um processo. No final combinam-se as soluções para obter a temperatura máxima.

Map and Reduce Quebra o processamento em duas fases: map and reduce. Cada fase tem pares chave-valor como entrada e saída (os tipos são escolhidos pelo programador). O programador especifica duas funções: a função de mapeamento e a função de redução.

Map and Reduce Map chave de entrada: deslocamento do inicio do arquivo até a linha com uma leitura climática. valor de entrada: string contendo todo o texto de um arquivo. função: prepara os dados para a função de redução, separando em cada linha o ano e a temperatura obtida. Também filtra campos faltando, dados incorretos ou suspeitos. chave de saída: string representando o ano. valor de saída: inteiro representando a temperatura.

Map and Reduce Reduce chave de entrada: string representando o ano. valor de entrada: inteiro representando a temperatura. função: itera sobre os valores de entrada procurando a temperatura máxima para cada ano. chave de saída: string representando o ano. valor de saída: inteiro representando a temperatura máxima.

Map and Reduce Figure 1. Fluxo de dados lógico do MapReduce.

Java MapReduce import java.io.ioexception; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; public class MaxTemperature { static class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private static final int MISSING = 9999; public void map(longwritable key, Text value, Context context) throws IOException, InterruptedException { } } String line = value.tostring(); String year = line.substring(15, 19); int airtemperature; if (line.charat(87) == '+') { // parseint doesn't like leading plus sign airtemperature = Integer.parseInt(line.substring(88, 92); } else { airtemperature = Integer.parseInt(line.substring(87, 92); } String quality = line.substring(92, 93); if (airtemperature!= MISSING && quality.matches("[01495]")) { context.write(new Text(year), new IntWritable(airTemperature)); }

Java MapReduce (cont.) static class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { } } int maxvalue = Integer.MIN_VALUE; for (IntWritable value : values) { maxvalue = Math.max(maxValue, value.get()); } context.write(key, new IntWritable(maxValue)); public static void main(string[] args) throws Exception { if (args.length!= 2) { System.err.println("Usage: MaxTemperature <input path> <output path>"); System.exit(-1); } Job job = new Job(); job.setjarbyclass(maxtemperature.class); FileInputFormat.addInputPath(job, new Path(args[0]); FileOutputFormat.setOutputPath(job, new Path(args[1]);

Java MapReduce (cont.) job.setmapperclass(maxtemperaturemapper.class); job.setreducerclass(maxtemperaturereducer.class); } } job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); System.exit(job.waitForCompletion(true)? 0 : 1);

Fluxo de dados Para executar a aplicação em uma escala maior é necessário armazenar os dados em um sistema de arquivos distribuído (tipicamente HDFS). Permite o Hadoop mover o processamento do MapReduce para cada maquina que contém parte dos dados.

Fluxo de dados Job - unidade de trabalho que o cliente quer que seja executado: dados de entrada; programa MapReduce; informações de configuração. Tasks - divisão de um job, que é processada individualmente. map tasks; reduce tasks. Jobtracker - nó que coordena toda a execução do job no sistema. Agenda tasks para serem executadas nos tasktrackers. Tasktracker - nós que executam tasks e enviam o relatório de seu progresso para o jobtracker.

Fluxo de dados Input splits - divisão dos dados de entrada em partes de tamanho fixo. Para cada split, é criado uma map task que executa a função de map para cada registro no split.

Fluxo de dados Figura 2. Fluxo de dados MapReduce com um único reduce task.

Fluxo de dados Figura 3. Fluxo de dados MapReduce com múltiplos reduce tasks.

Fluxo de dados Figura 4. Fluxo de dados sem reduce tasks.

Executando MapReduce Distribuído O mesmo programa levou 6 minutos.

Hadoop Streaming Provê API que permite escrever as funções map e reduce em outras linguagens além de Java. Usa o Unix como interface entre o Hadoop e o seu programa. Função map recebe o arquivo de entrada, processa linha por linha e gera um arquivo de saída com os pares chavevalor separados por um caractere de tabulação. Função reduce recebe o arquivo de saída da função map, processa e escreve o resultado na saída padrão.

Referências Tom White, "Hadoop the definitive guide". O'Reilly, 2ª edição. Documentação: http://hadoop.apache.org/common/docs/r0.17.0 /api/org/apache/hadoop/mapred/package-summary.html Tutorial MapReduce: http://hadoop.apache. org/common/docs/current/mapred_tutorial.html