• Nenhum resultado encontrado

6.1 Objetivos da experimentação

6.2.2 Algoritmos de teste

Foram realizados testes em 5 algoritmos pertencentes ao benchmark do Apache Hadoop.

Algoritmo Sudoku

O Apache Sudoku tem como objetivo receber um arquivo de dados com as informações de um tabuleiro como apresentado na Figura 15a e apresentar uma solução para a entrada como a Figura 15b. O Algoritmo possui uma estrutura com complexidade algorítmica da ordem de O(n2), ou seja, dobrando o tamanho da entrada, o tempo de execução em média do algoritmo

quadruplica (HADOOP EXAMPLES, 2014).

O algoritmo permite solucionar problemas com uma matriz de dimensão assimétrica (não quadrada). E a execução do algoritmo é dado pela seguinte linha bin/hadoop jar hadoop-examples-1.1.1.jar sudoku puzzle1.dta

Figura 15: Entrada para o algoritmo: (a) matriz de entrada para o algoritmo; (b) matriz de saída do algoritmo 8 5 3 9 2 6 1 2 4 3 5 9 8 9 1 4 3 2 4 8 9 8 5 2 4 5 7 8 (a) 8 5 1 3 9 2 6 4 7 4 3 2 6 7 8 1 9 5 7 9 6 5 1 4 3 8 2 6 1 4 8 2 3 7 5 9 5 7 8 9 6 1 4 2 3 3 2 9 4 5 7 8 1 6 9 4 7 2 8 6 5 3 1 1 8 5 7 3 9 2 6 4 2 6 3 1 4 5 9 7 8 (b)

66

Algoritmo Pi

O algoritmo Pi pertencente ao benchmark do Hadoop é um programa que usa o Map- Reduce para estimar o valor do Pi usando o método de quase-Monte Carlo.

A configuração utilizada do algoritmo é dado pela seguinte linha hadoop jar

/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar pi 5

1000. Pode-se observar que o problema em questão é resolvido usando 5 Maps, cada uma

para computar 1000 pontos por valor parametrizados. Esses parâmetros podem ser alterados para melhorar o valor de Pi (HADOOP, 2014).

A Figura 16 apresenta a saída para a execução do exemplo acima. Pode-se verificar informações da quantidade de Maps utilizados, e informações de saída como: tempo utilizado de GC, tempo gasto de CPU, memória física, memória virtual, total heap utilizada e tempo gasto de execução.

Figura 16: Saída do algoritmo Pi

Number of Maps = 5 Samples per Map = 1000 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Wrote input for Map #4

Starting Job 14/09/03 09:54:35

INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

14/09/03 09:54:36 INFO input.FileInputFormat: Total input paths to process: 5 14/09/03 09:54:36 INFO mapreduce.JobSubmitter: number of splits:5

...

14/09/03 09:54:49 INFO mapreduce.Job: map 0% reduce 0% 14/09/03 09:55:30 INFO mapreduce.Job: map 40% reduce 0% 14/09/03 09:55:43 INFO mapreduce.Job: map 60% reduce 0% 14/09/03 09:55:44 INFO mapreduce.Job: map 100% reduce 0% 14/09/03 09:56:08 INFO mapreduce.Job: map 100% reduce 100%

14/09/03 09:56:11 INFO mapreduce.Job: Job job_140_0071 completed successfully 14/09/03 09:56:13 INFO mapreduce.Job: Counters: 49

File System Counters ...

Job Counters ...

Map-Reduce

Framework Map input records=5 ...

GC time elapsed (ms)=934 CPU time spent (ms)=9352

Physical memory (bytes) snapshot=880386048 Virtual memory (bytes) snapshot=967434240 Total committed heap usage (bytes)=622153728 Shuffle Errors

Job Finished in 98.937 seconds

67

Algoritmo WordCount

O algoritmo WordCount pertencente ao benchmark do Hadoop é um programa que implementa a função de Map e Reduce que são utilizadas para contar a quantidade de palavras em um determinado texto.

Para cada arquivo de entrada (Figura 17), a etapa de Map contará as palavras existentes e agrupará em uma estrutura (palavra, quantidade), a etapa de Shuffle unirá as duas partes da etapa anterior em (palavra, [quantidade1, ..., quantidadeN]). Por fim, a etapa de

Reduce somará as quantidades e apresentará para o usuário como reposta.

A execução do algoritmo é dado pela seguinte linha hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar

wordcount /texto.txt /saidaTexto. O arquivo texto utilizado para os testes contém

informações de aproximadamente 106MB. Ao todo o arquivo possui aproximadamente 19 milhões de palavras.

Figura 17: Funcionamento do algoritmo WordCount

Fonte: (Goldman, et al., 2012)

A Figura 18 apresenta a saída para a execução do exemplo acima. Pode-se verificar informações de saída como: tempo utilizado de GC, tempo gasto de CPU, memória física, memória virtual, total heap utilizada e tempo gasto de execução.

68

Algoritmo TestDFSIO

O algoritmo TestDFSIO é um teste de leitura e escrita para HDFS. É útil para tarefas como testes de esforço HDFS, para descobrir os gargalos de desempenho na rede, para produzir e verificar a performance do hardware e sistema em operações de leitura e escrita.

O teste de leitura de TestDFSIO não gera seus próprios arquivos de entrada. Por esta razão, é uma prática conveniente executar primeiro um teste de gravação via –write e em seguida um teste de leitura via –read (LI, J. ET AL., 2013).

Para o teste de escrita, a execução do algoritmo é dado pela seguinte linha hadoop

org.apache.hadoop.fs.TestDFSIO -write -nrFiles 1 -fileSize 1GB. Já para

o teste de leitura, a execução do algoritmo é dado pela seguinte linha hadoop

org.apache.hadoop.fs.TestDFSIO -read -nrFiles 1 -fileSize 1GB. Em ambas

as linhas o teste está manipulando um único arquivo com 1GB de informação. Figura 18: Saída do algoritmo WordCount

14/09/03 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 14/09/03 11:14:12 INFO input.FileInputFormat: Total input paths to process : 1 14/09/03 11:14:12 INFO mapreduce.JobSubmitter: number of splits:1

...

11:14:13 INFO mapreduce.Job: Running job: job_1409725645049_0106 14/09/03 11:14:24 INFO mapreduce.Job: map 0% reduce 0%

14/09/03 11:14:37 INFO mapreduce.Job: map 13% reduce 0% 14/09/03 11:14:43 INFO mapreduce.Job: map 21% reduce 0% 14/09/03 11:14:46 INFO mapreduce.Job: map 25% reduce 0% 14/09/03 11:14:49 INFO mapreduce.Job: map 27% reduce 0% 14/09/03 11:14:52 INFO mapreduce.Job: map 36% reduce 0% 14/09/03 11:14:58 INFO mapreduce.Job: map 46% reduce 0% 14/09/03 11:15:01 INFO mapreduce.Job: map 47% reduce 0% 14/09/03 11:15:04 INFO mapreduce.Job: map 52% reduce 0% 14/09/03 11:15:07 INFO mapreduce.Job: map 58% reduce 0% 14/09/03 11:15:10 INFO mapreduce.Job: map 59% reduce 0% 14/09/03 11:15:13 INFO mapreduce.Job: map 67% reduce 0% 14/09/03 11:15:19 INFO mapreduce.Job: map 100% reduce 0% 14/09/03 11:15:43 INFO mapreduce.Job: map 100% reduce 100%

14/09/03 11:15:47 INFO mapreduce.Job: Job job_1449_0106 completed successfully 14/09/03 11:15:47 INFO mapreduce.Job: Counters: 49

File System Counters ... Job Counters ... Map-Reduce Framework ... GC time elapsed (ms)=1899 CPU time spent (ms)=55117

Physical memory (bytes) snapshot=310185984 Virtual memory (bytes) snapshot=332783616 Total committed heap usage (bytes)=186957824 Shuffle Errors

...

File Input Format Counters Bytes Read=111539491 File Output Format Counters Bytes Written=1254041

69

A Figura 19 apresenta a saída para a execução dos dois exemplos acima. Pode-se verificar informações de saída como: tempo utilizado de GC, tempo gasto de CPU, memória física, memória virtual, total heap. Informações referentes a I/O e vazão também podem ser observadas como saída.

Figura 19: Saída do algoritmo TestDFSIO

...

INFO fs.TestDFSIO: --- TestDFSIO --- : write

INFO fs.TestDFSIO: Date & time: Wed Sep 03 03:34:35 BRT 2014 INFO fs.TestDFSIO: Number of files: 1

INFO fs.TestDFSIO: Total MBytes processed: 1024.0 INFO fs.TestDFSIO: Throughput mb/sec: 9.971759665011199 INFO fs.TestDFSIO: Average IO rate mb/sec: 9.971759796142578 INFO fs.TestDFSIO: IO rate std deviation: 0.001891378299681122 INFO fs.TestDFSIO: Test exec time sec: 220.75

INFO fs.TestDFSIO: --- TestDFSIO --- : read

INFO fs.TestDFSIO: Date & time: Wed Sep 03 03:37:14 BRT 2014 INFO fs.TestDFSIO: Number of files: 1

INFO fs.TestDFSIO: Total MBytes processed: 1024.0

INFO fs.TestDFSIO: Throughput mb/sec: 10.548218957951338 INFO fs.TestDFSIO: Average IO rate mb/sec: 10.548218727111816 INFO fs.TestDFSIO: IO rate std deviation: 0.0016878044420488402 INFO fs.TestDFSIO: Test exec time sec: 149.969

Documentos relacionados