5.2 Metodologia
5.2.1 Especificações de Software
5.2.1.2 HiBench Benchmark Suite
O HiBench é um conjunto de aplicações Big Data que ajuda a avaliar diferentes frameworks Big Data em termos de velocidade, throughput e utilização de recursos do sistema. Ele contém várias aplicações de processamento em lotes para os frameworks Hadoop, Spark, incluindo Sort, WordCount, TeraSort, Sleep, enhanced DFSIO, SQL, Pa- geRank, Nutch indexing, NWeight, Bayes, Kmeans, dentre outros. Ele também contém vá- rias aplicações de processamento em tempo real para os frameworks Spark, Flink, Storm e Gearpump, incluindo identity, repartition, wordcount, fixwindow (AUTORES, 2018).
As aplicações para processamento em lotes estão divididas em 5 domínios, são eles:
A) Micro Benchmarks
são gerados usando RandomTextWriter que é um componente do framework Hadoop (AUTORES, 2018).
• WordCount: Essa aplicação conta a ocorrência de cada palavra nos dados de entrada, que são gerados usando RandomTextWriter. Ele é representativo de outra classe típica de tarefas MapReduce do mundo real - extrair uma pequena quantidade de dados interessantes de um grande conjunto de dados (AUTO- RES, 2018);
• TeraSort: Essa aplicação classifica registros de 100 bytes gerados pelo Tera- Genque é um componente do framework Hadoop (HUANG et al., 2010a); • Workload: nas aplicações deste domínio, a entrada de dados é um arquivo de
texto. O tamanho do arquivo gerado é definido por um parâmetro no arquivo de configuração do Hibench. Na Tabela 5.1, estão definidos os nomes dos parâmetros e seus tamanhos em bytes. Cada linha desta tabela representa uma Tabela 5.1: Cargas de trabalho para o domínio Micro Benchmarks
Configuração
Tamanho em Bytes
tiny
31,25 KB
small
3,05 MB
large
305,1 MB
huge
2,98 GB
gigantic
29,8 GB
bigdata
279,4 GB
Fonte: O Autorconfiguração da entrada de dados para as aplicações deste domínio. B) SQL
• Join: Essa aplicação calcula a média e a soma de cada grupo unindo duas ta- belas diferentes (HUANG et al., 2010b). A entrada é gerada automaticamente com dados da Web (hiperlinks) seguindo a distribuição Zipfian (AUTORES, 2018);
• Aggregate: Essa aplicação calcula a soma de cada grupo sobre uma tabela (HUANG et al., 2010b). A entrada é gerada automaticamente com dados da Web (hiperlinks) seguindo a distribuição Zipfian (AUTORES, 2018);
• Workload: nas aplicações deste domínio, a entrada de dados é uma tabela de dados. O tamanho da tabela gerada é definido por dois parâmetros (uservisits e
pages) no arquivo de configuração do Hibench. Na Tabela 5.2, estão definidos os nomes dos parâmetros e seus tamanhos. Cada linha desta tabela representa
Tabela 5.2: Cargas de trabalho para o domínio SQL
Configuração uservisits pages
tiny 1.000 120
small 100.000 12.000
large 1.000.000 120.000
huge 10.000.000 1.200.000
gigantic 100.000.000 12.000.000
bigdata 5.000.000.000(join) 120.000.000(join)
1.000.000.000(aggregation) 10.000.000(aggregation)
Fonte: O Autor
uma configuração da entrada de dados para as aplicações deste domínio. C) Websearch Benchmarks
• PageRank: Esta aplicação faz o benchmark do algoritmo PageRank imple- mentado nos exemplos de referência do Spark-MLLib/Hadoop (um meca- nismo de classificação). A fonte de dados é gerada a partir de dados da Web (hiperlinks) que seguem a distribuição Zipfian (AUTORES, 2018);
• Workload: nas aplicações deste domínio, a entrada de dados é uma arquivo de texto. O tamanho do arquivo gerado é definido por quatro parâmetros (pages, num_iterations, numblock e block_width). Na Tabela 5.3, estão definidos o nomes dos parâmetros e seus valores. Cada linha desta tabela representa uma Tabela 5.3: Cargas de trabalho para o domínio Websearch Benchmarks
Configuração pages num_iterations block block_width
tiny 50 1 0 16 small 5.000 3 0 16 large 500.000 3 0 16 huge 5.000.000 3 0 16 gigantic 30.000.000 3 0 16 bigdata 50.000.000 3 0 16 Fonte: O Autor
configuração da entrada de dados para as aplicações deste domínio. D) Machine Learning
• Bayesian Classification: Naive Bayes é um algoritmo de classificação multi- classe simples com a suposição de independência entre cada par de recursos. Essa aplicação é implementada na biblioteca Spark-MLLib/Hadoop e usa os
documentos gerados automaticamente cujas palavras seguem a distribuição Zipfian. O dicionário utilizado para geração de texto também é do arquivo Linux padrão1(AUTORES, 2018);
• K-means clustering: Essa aplicação testa o armazenamento em cluster K- means (um algoritmo de agrupamento bem conhecido para mineração de da- dos) em Spark-MLLib/Hadoop. O conjunto de dados de entrada é gerado pelo GenKMeansDataset com base na distribuição Uniforme e na distribuição Guassiana (AUTORES, 2018);
• Workload: para cada aplicação deste domínio, a entrada de dados é uma arquivo de texto. O tamanho do arquivo gerado é definido por três parâ- metros (pages, classes e ngrams) no caso da aplicação Bayesian Classifica- tion. Já no caso da aplicação K-means clustering, o arquivo gerado é de- finido por sete parâmetros (num_of_clusters, dimensions, num_of_samples, samples_per_inputfile, max_iteration, k e convergedist). Na Tabela 5.4, estão definidos os nomes dos parâmetros e seus tamanhos para a aplicação Bayesian Classification. Na Tabela 5.5, estão definidos os nomes dos parâmetros e seus tamanhos para a aplicação K-means clustering.
Tabela 5.4: Cargas de trabalho para o domínio Machine Learning (Bayesian Classifica- tion)
Configuração pages classes ngrams
tiny 25.000 10 1 small 30.000 100 2 large 100.000 100 2 huge 500.000 100 2 gigantic 1.000.000 100 2 bigdata 20.000.000 20.000 2 Fonte: O Autor
Cada linha desta tabela representa uma configuração da entrada de dados para as aplicações deste domínio.
E) Streaming Benchmarks
Tabela 5.5: Cargas de trabalho para o domínio Machine Learning (K-means clustering)
Configuração num_of_clusters dimensions num_of_samples samples_per_inputfile max_iteration k convergedist
tiny 5 3 30.000 6.000 5 10 0.5 small 5 20 3.000.000 600.000 5 10 0.5 large 5 20 20.000.000 4.000.000 5 10 0.5 huge 5 20 100.000.000 20.000.000 5 10 0.5 gigantic 5 20 200.000.000 40.000.000 5 10 0.5 bigdata 5 20 1.200.000.000 40.000.000 10 10 0.5 Fonte: O Autor
• Identity: Essa aplicação lê dados de entrada do Kafka e depois grava o resul- tado imediatamente no Kafka (AUTORES, 2018);
• Repartition: Essa aplicação lê os dados de entrada do Kafka e altera o nível de paralelismo criando mais ou menos partições. Ele testa a eficiência do shuffle de dados nos frameworks para processamento em tempo real (AUTORES, 2018);
• Stateful Wordcount: Essa aplicação conta palavras cumulativamente recebi- das do Kafka a cada poucos segundos. Testa o desempenho do operador com informações de estado (stateful operator) e o custo do Checkpoint/Acker nos frameworkspara processamento em tempo real (AUTORES, 2018);
• Fixwindow: Essa aplicação executa uma agregação baseada em janela. Testa o desempenho da operação baseada em janela nos frameworks para processa- mento em tempo real (AUTORES, 2018);
• Workload: nas aplicações deste domínio, a entrada de dados é um tópico no Kafka, de onde as aplicações lerão as mensagens a serem processadas. O número total de mensagens, o tamanho das mensagens e a vazão delas são definidos por seis parâmetros. São eles:
– Intervalo de tempo em milissegundos entre cada grupo de mensagens en- viadas ao tópico no Kafka;
– Número de mensagens que compõem o grupo de mensagens a serem en- viadas ao tópico no Kafka;
– Tamanho em bytes de cada mensagem a ser enviada;
– Número de produtores das mensagens enviadas ao tópico no Kafka; – Número total de grupos de mensagens enviadas;
– Número total de mensagens enviadas.
A Tabela 5.6 resume os domínios e aplicações do Hibench, bem como os frameworks suportados em cada um desses domínios.
Tabela 5.6: Domínios, aplicações e frameworks
Domínio Aplicações FrameworksSuportados
Micro Sort, Terasort e Wordcount Hadoop e Spark
SQL Aggregation e Join Hadoop e Spark
Websearch Pagerank Hadoop e Spark
Machine Learning Bayes e K-means Hadoop e Spark
Streaming Identity, Repartition, Stateful Wordcount e Fixwindow Spark e Flink
Fonte: O Autor
A seguir, serão descritas as especificações do hardware utilizado neste trabalho.
5.2.2 Especificações de Hardware
As arquiteturas ARMv7 e ARMv8 são as principais arquiteturas ARM disponíveis atualmente. Por esse fato, essas duas arquiteturas serão avaliadas neste trabalho. A seguir, um breve resumo sobre cada uma delas será apresentado.
5.2.2.1 ARMv7
O conjunto de instruções ARMv7 é um conjunto de instruções de 32 bits que for- nece funções abrangentes de processamento e controle de dados. O conjunto de instruções Thumb foi desenvolvido como um conjunto de instruções de 16 bits com um subconjunto da funcionalidade do conjunto de instruções ARMv7. Ele fornece densidade de código significativamente aprimorada, a um custo de alguma redução no desempenho. Um pro- cessador que executa instruções do Thumb pode mudar para executar instruções do ARM para segmentos críticos de desempenho, em particular para lidar com interrupções (HOL- DINGS, 2018).
ARMv7-A é o perfil da arquitetura ARMv7 utilizada em smartphones, tablets e outros dispositivos móveis e/ou compactos até sistemas de grande porte, como sistemas HPC. Essa arquitetura implementa uma arquitetura ARM tradicional com vários modos que suporta uma arquitetura de sistema de memória virtual (VMSA) baseada em uma unidade de gerenciamento de memória (MMU). Uma implementação do ARMv7-A pode ser chamada de implementação do VMSAv7 (HOLDINGS, 2018).
Essa arquitetura também suporta os conjuntos de instruções ARM e Thumb. Como extensão do conjunto de instruções da arquitetura ARMv7 temos instruções de ponto flu- tuante, instruções SIMD (Single Instruction Multiple Data), dentre outros. Como exten-
são da arquitetura ARMv7, temos extensões referentes a segurança, virtualização, suporte a multiprocessamento, dentre outros. Os conjuntos de instruções ARMv7 endereçam um único espaço de endereço simples de 232bytes de 8 bits. Esse espaço de endereço tam- bém é considerado como 230palavras de 32 bits ou 231palavras de 16 bits (HOLDINGS,
2018).
A arquitetura fornece recursos para: gerar uma exceção em um acesso de memória não alinhado; restringir o acesso por aplicativos a áreas especificadas de memória; tradu- zir endereços virtuais fornecidos executando instruções em endereços físicos; alterar a interpretação dos dados de palavra de 32 bits e palavra de 16 bits entre big-endian e little- endian; controlar a ordem de acessos à memória; controlar acessos a caches; sincronizar o acesso à memória compartilhada por vários processadores (HOLDINGS, 2018).