Análise de desempenho entre os sistemas de arquivos HDFS e

Transcrição

Análise de desempenho entre os sistemas de arquivos HDFS e
ANÁLISE DE DESEMPENHO ENTRE OS
SISTEMAS DE ARQUIVOS HDFS E LUSTREFS1
Marcos Fagundes Vieira <[email protected]>
Orientador: Júlio César S. dos Anjos <[email protected]>
Universidade Luterana do Brasil (ULBRA) - Superior de Tecnologia em Redes de Computadores
Canoas – RS – Brasil
29 de novembro de 2010
RESUMO
Este artigo apresenta os sistemas de arquivos Hadoop Distribuited File System (HDFS) e Lustre File System
(LustreFS) e avalia o desempenho entre dois sistemas que utilizam o HDFS o LustreFS para execução de tarefas
como leitura e gravação de dados. O ambiente de computação utiliza um agrupamento de computadores
heterogêneos. São utilizadas ferramentas de monitoração, como Cacti e RRDtool para coletar informações em tempo
real da atividade de computação neste ambiente. O relato do experimento e a análise dos dados são apresentados com
objetivo de avaliar quantitativa e qualitativamente os dois sistemas.
Palavras-chave: Sistemas de arquivos, HDFS, LustreFS, sistemas distribuídos, sistemas paralelos.
ABSTRACT
Title: “Performance Analysis of File Systems HDFS and LustreFS”
This article presents the file systems Distribuited Hadoop File System (HDFS) and Lustre File System
(LustreFS) and evaluates the performance between two systems using the HDFS LustreFS for tasks such as reading
and writing data. The computing environment using a cluster of heterogeneous computers. Monitoring tools are used,
such as Cacti and RRDtool to collect information in real-time computing activity in this environment. The report of
the experiment and data analysis are presented to evaluate qualitatively and quantitatively the two systems.
Key-words: Filesystems, HDFS, LustreFS, distributed systems, parallel systems.
1 INTRODUÇÃO
Os avanços tecnológicos juntamente com o crescente poder de processamento dos
microprocessadores proporcionaram a criação de arquiteturas que primam pela computação de alto
desempenho ou High-Performance Computing (HPC). Em Pitanga (2008), o resultado dos avanços
tecnológicos somados à facilidade de interligar múltiplos computadores através de um barramento externo
de alta velocidade favoreceu o surgimento dos sistemas distribuídos, que contêm várias máquinas
interligadas em rede com intuito de oferecer a imagem de um sistema único e transparente.
Os sistemas de arquivos Hadoop Distribuited File System (HDFS) e Lustre File System (LustreFS)
são baseados em arquiteturas HPC. O primeiro usa sistemas distribuídos e o segundo, sistemas paralelos e
distribuídos. Segundo White (2009), o HDFS, basicamente utiliza um algoritmo de distribuição para
segmentar os dados em N partições de tamanhos iguais chamadas chunks e distribui para a execução de
funções map e reduce, inspirada em linguagens funcionais sobre os nós da rede que contém estes dados
distribuídos. Conforme Kling-Petersen (2009), o sistema de arquivos Lustre é uma arquitetura apenas de
software que pode ser aplicada em diferentes tipos de hardware. Neste modelo, há uma separação bem
definida entre os arquivos de dados (ou objetos) e metadados. O servidor de metadados proporciona o acesso
direto e paralelo aos objetos gravados nos dispositivos de armazenamento ou storage devices.
1.1
Motivação
Os sistemas operacionais atuais necessitam de estruturas lógicas avançadas que viabilizem o acesso à
informação com maior eficiência e segurança. O que motiva o presente estudo está relacionado à
compreensão e a identificação dos mecanismos utilizados em sistemas de arquivos distribuídos que podem
contribuir para o aumento do desempenho e da disponibilidade de acesso aos dados.
1
Artigo Final da disciplina de Trabalho de Conclusão do Curso em Superior de Tecnologia em Redes de Computadores da Universidade Luterana
do Brasil, Campus Canoas;
1.2
Objetivos
O principal objetivo deste projeto foi analisar o desempenho de dois sistemas de arquivos
distribuídos – HDFS e LustreFS, implementados em um ambiente controlado. Estes sistemas são comumente
utilizados em ambientes de clusters homogêneos. Neste projeto foi possível medir a potencialidade do uso
dessas duas arquiteturas em ambientes computacionais de alto desempenho, porém em cluster heterogêneo,
onde cada máquina tem poder computacional diferente. Os objetivos específicos são: a análise comparativa
entre as arquiteturas envolvidas, avaliação do desempenho de cada sistema de arquivo e teste de performance
entre os sistemas paralelos.
Além deste capítulo, este artigo contém as seguintes seções. Na seção 2, é descrita a fundamentação
teórica sobre o tema proposto. Na seção 3, é detalhada a metodologia aplicada para a solução do problema,
com a descrição do ambiente, das ferramentas de monitoração e softwares utilizados. Na seção 4, é
mostrado o relatório final com apresentação dos resultados. Na seção 5, são apresentadas as conclusões do
autor e propostas para trabalhos futuros. Na seção 6, são mencionadas as referências bibliográficas utilizadas
no decorrer do trabalho para embasamento e fundamentação do tema proposto.
2 SISTEMAS DE ARQUIVOS LUSTREFS E HDFS
Ao se estudar as funcionalidades dos sistemas de arquivos HDFS e LustreFS, alguns conceitos
básicos e algumas características fundamentais devem ser levados em consideração para um melhor
entendimento sobre o funcionamento de cada um deles.
2.1
Conceitos básicos em Sistemas Operacionais
O sistema operacional (SO) "é uma camada de software colocada entre o hardware e os programas
que executam tarefas para o usuário. [...]. Desta forma, o programador não precisa conhecer detalhes do
hardware" (OLIVEIRA, 2010, p.22).
Conforme Machado e Maia (2007), o SO controla a execução de diversos programas concomitantes
e concorrentes entre si pelo processador e demais recursos. Ele gerencia os arquivos dentro do computador e
o sistema de arquivos, que por sua vez, controla o acesso dos usuários ao conteúdo destes arquivos.
Quando um usuário executa um programa em seu computador é disparado um processo controlado
pelo SO de sua máquina. Segundo Machado e Maia, este "[...] processo deve ser capaz de ler e gravar de
forma permanente um grande volume de dados em dispositivos como fitas e discos, além poder compartilhálos com outros processos" (2007, p.215).
Em sistemas distribuídos, quando mais de um usuário tenta gravar um mesmo arquivo
simultaneamente, é necessário um controle da concorrência (acesso simultâneo ao mesmo recurso) para que
haja uma operação atômica dos processos para garantir que a informação permaneça consistente. Conforme
Tanenbaum e Steen, em um grupo de processos, a atomicidade só pode ser garantida da seguinte maneira:
"ou todos os processos executam determinada operação ou a operação não é executada de jeito nenhum"
(2007, p.73). Aguiar complementa ainda que: "uma operação em um arquivo é dita atômica quando as
etapas da mesma não podem ser percebidas por outros processos exteriores a esta operação" (2008, p.6).
Atualmente, a maioria dos sistemas de arquivos distribuídos (SAD) já utiliza a atomicidade nas operações de
leitura, escrita, criação ou remoção de um arquivo.
Em Tanenbaum, "a informação armazenada em arquivos deve ser persistente, isto é, não pode ser
afetada pela criação e pelo término de um processo. Um arquivo somente desaparecerá, quando seu
proprietário removê-lo explicitamente" (2003, p.285). [grifo do autor]
2.2
Características do sistema de arquivos
O sistema de arquivos é um componente do SO que permite ao usuário interagir com os arquivos e
diretórios, seja para salvar, modificar ou excluir arquivos e pastas, seja para instalar, executar ou configurar
programas. Coulouris et al. caracteriza sistemas de arquivos como "responsáveis pela organização,
armazenamento, recuperação de nomes, compartilhamento e proteção de arquivos" (2007, p.287).
Existe uma interface de programação que abstrai o arquivo, favorecendo os programadores a não se
preocuparem com detalhes de alocação do arquivo, leiaute de armazenamento, mapeamento de bits, etc. O
armazenamento físico de um arquivo em disco ou em qualquer outra mídia deve ocorrer de forma persistente
ou não-volátil, ou seja, o SO mantém os dados gravados no disco, mesmo após o computador ser desligado
(COULOURIS et al., 2007).
Todo arquivo é composto externamente por um nome e uma extensão, preferencialmente separadas
por um ponto. Internamente ele é composto por dados, atributos e metadados. O SO organiza em uma
estrutura hierárquica chamada de diretório. Segundo Oliveira et al., "arquivos são recipientes que contêm
dados. [...]. Cada arquivo contém um conjunto de dados que possui algum significado prático para o
usuário ou para o sistema" (2010, p.208) [grifo do autor]. Diretório é uma estrutura que possibilita aos
usuários organizar seus arquivos no sistema, além de facilitar o manuseio, compartilhamento e localização de
arquivos.
Conforme Coulouris et al., "os dados consistem em uma seqüência de elementos (normalmente, bytes
de oito bits), acessíveis pelas operações de leitura e escrita de qualquer parte desta seqüência" (2007,
p.287). Ele complementa ainda que, além dos dados, os arquivos contêm atributos, que são estruturados num
único registro com informações relevantes para o sistema de arquivos, como: nome, tamanho, tipo, proteção,
identificação do criador, data de criação, etc. Os metadados, por sua vez, contêm todas as informações
adicionais existentes num sistema de arquivos, utilizadas para o seu gerenciamento. Exemplos de metadados:
nome do dado, atributo de arquivos, diretórios, extensão de arquivos, etc.
2.3
Computação de alto desempenho ou High-Performance Computing (HPC)
O conceito de computação de alto desempenho está ligado ao surgimento e consolidação do
agrupamento de computadores ou clusters. Pitanga (2008) conceitua cluster como sendo a união de dois ou
mais computadores que trabalham em conjunto para resolver um determinado problema.
Existem duas categorias de agrupamentos de computadores: alta disponibilidade ou High Availability
(HA) e computação de alto desempenho ou High-Performace Computing (HPC). Segundo Pitanga, o cluster
HA garante o funcionamento seguro e ininterrupto de um serviço sempre que for possível, mesmo que
existam falhas de qualquer natureza. Já o cluster HPC, "é um tipo de sistema para processamento paralelo
ou distribuído que consiste de uma coleção de computadores interconectados, trabalhando juntos como um
recurso de computação simples e integrado" (PITANGA, 2008, p.31).
Clusters são sistemas com múltiplos processadores classificados em fortemente ou fracamente
acoplados (MACHADO e MAIA, 2007, p.257). No primeiro caso, sistemas fortemente acoplados (tightly
coupled) compartilham uma memória física entre vários processadores. No segundo, sistemas fracamente
acoplados (loosely coupled), no qual estão incluídos os clusters, há a conexão de dois ou mais sistemas
computacionais independentes entre si, cada um funcionando com seus próprios recursos de processamento,
memória e SO (MACHADO e MAIA, 2007).
Segundo Veras, algumas vezes "para o cluster HPC funcionar é necessário utilizar um software de
gerenciamento que permite que os diversos nós de processamento existentes sejam tratados como um único
nó" (2009, p.93). Conforme Schepke et al. (2005), existe uma série de ferramentas disponíveis para
gerenciamento de clusters, com destaque para: Kickstart e FAI (Fully Automatic Installation) usadas para a
instalação automática de cluster; SCMS (Scalable Cluster Management System) e SHOC (Shell Over a
Cluster) usadas para atualização e configuração automática de clusters.
As vantagens no uso de clusters HPC concentram-se sob cinco aspectos: alto desempenho,
escalabilidade, tolerância a falhas, baixo custo e softwares de código aberto O cluster HPC, além de
proporcionar alto desempenho, também pode apresentar HA em sua arquitetura (PITANGA, 2008).
Atualmente existem várias propostas de DFS (Distribuited File Systems) que visam tirar proveito do uso de
sistemas de arquivos em clusters, principalmente quando se tratam de armazenamento escalável com
desempenho. É neste quadro que se enquadram as duas arquiteturas estudadas neste trabalho.
2.4
Ambiente cliente/servidor
Machado e Maia (2007) relatam que os sistemas operacionais podem ser heterogêneos, bastando que
os nós entre eles se comuniquem através do mesmo protocolo de rede. Na Internet, por exemplo, nada
impede que cada host utilize um SO diferente, contanto que a comunicação entre todos os hosts seja através
do protocolo TCP/IP (Transmission Control Protocol/Internet Protocol).
Segundo Veras, o modelo cliente/servidor possui as seguintes características: "um servidor é um
aplicativo que [...] recebe uma solicitação, realiza o serviço e envia de volta o resultado em uma resposta.
Um cliente é um solicitador de serviço" (2009, p.78). Uma aplicação envolve um servidor e um cliente num
mesmo sistema ou em sistemas diferentes.
Em Tanenbaum, uma das vantagens deste modelo diz respeito a sua adaptabilidade com sistemas
distribuídos, ou seja, "se um cliente se comunica com um servidor enviando-lhe mensagens, o cliente não
precisa saber se a mensagem é tratada localmente em sua própria máquina ou se ela foi enviada pela rede a
um servidor" (2003, p.46). Na verdade, o cliente apenas faz uma requisição e aguarda uma resposta do
servidor.
2.5
Sistema de Arquivos Paralelos e Distribuídos
Como já visto na seção 2.2 deste capítulo é pertinente relatar algumas características particulares das
arquiteturas SAP e SAD que são, respectivamente, utilizadas nos sistemas de arquivos LustreFS e HDFS
deste trabalho.
Pitanga define paralelismo como sendo "uma técnica utilizada em grandes e complexas tarefas para
obter resultados na forma mais rápida possível" (2008, p.10). A tarefa principal é subdividida em partes
menores e distribuída por vários processadores dentro do sistema paralelo, ao qual serão executadas
simultaneamente. O conceito de SAP incorporou-se às arquiteturas computacionais modernas com objetivo
de proporcionar alto desempenho a um custo menor. Conforme Guardia e Sato (1999), um SAP gerencia o
acesso paralelo aos vários discos de armazenamento presente em sua arquitetura, permitindo altas taxas de
transferência, redução no atraso das requisições com o uso de buffers em disco e aumento da vazão das
transmissões entre disco e memória.
Segundo Dodonov, "os arquivos paralelos podem estar armazenados sob controle do hardware (por
exemplo, utilizando Redundant Arrays of Inexpensive Disk ou RAID) ou sob o controle de um sistema de
arquivos paralelos" (2004, p.4), como é o caso do LustreFS analisado. A técnica de RAID caracteriza-se por
criar um array de discos ou grupo de discos físicos redundantes que "são tratados pelo sistema operacional
como se fosse um único disco. Este disco tem como característica uma grande capacidade de
armazenamento, alto desempenho e confiabilidade dos dados armazenados" (MACHADO e MAIA, 2007,
p.239).
Sistema distribuído, na visão de Tanenbaum e Steen é "um conjunto de computadores independentes
que se apresenta a seus usuários como um sistema único e coerente" (2007, p.1). Exemplos clássicos de
sistemas distribuídos em redes de computadores são: Internet e Intranet. Reforçando este conceito, sistema
distribuído pode ser definido ainda como: "aquele no qual os componentes de hardware ou software,
localizados em computadores interligados em rede, se comunicam e coordenam suas ações apenas enviando
mensagens entre si" (COULOURIS, 2007, p.16).
Segundo Tanenbaum, o SAD "é aquele que parece aos olhos dos usuários um sistema operacional
tradicional de processador único, mesmo que na verdade seja composto de múltiplos processadores" (2003,
p.12). Os usuários do SAD compartilham diretórios como se fossem diretórios locais, não percebem onde os
programas estão sendo executados, nem onde os arquivos estão localizados. "É comum que sistemas
distribuídos permitam que aplicações sejam executadas em vários processadores ao mesmo tempo, o que
exige algoritmos mais complexos de escalonadores" (TANENBAUM, 2003, p.12).
Em Coulouris et al. (2007), uma das virtudes do SAD é proporcionar a imagem de um sistema único
e transparente, ou seja, o usuário tem a nítida sensação que o acesso aos arquivos ocorre na sua própria
máquina. As vantagens que merecem destaque em sistemas distribuídos são: a heterogeneidade de seus
componentes; a escalabilidade em sua arquitetura que permite anexar ou substituir componentes; o uso de
sistemas abertos com máquinas e serviços independentes de fornecedores individuais; a tolerância à falhas
com prevenção contra perda de dados ou inoperância em equipamentos; ambiente concorrente com
operações sincronizadas e dados consistentes atomicamente; transparência para seus usuários com a sensação
de um sistema único e abstrato (COULOURIS et al., 2007).
2.6
Sistema de arquivos Lustre (LustreFS)
Segundo Pitanga, "o Lustre é uma arquitetura de armazenamento para clusters desenvolvido
inicialmente pela Carnegie Mellon University como projeto de pesquisa iniciado em 1999" (2008, p.284).
No ano de 2003, a empresa Cluster File System Inc. desenvolve a versão 1.0 do Lustre File System, que
passa ser utilizada com sucesso no meio acadêmico e corporativo. Em 2007, a Sun Microsystems, que
buscava soluções em HPC, adquiriu a empresa Cluster File System Inc. e passou a ser a atual proprietária e
desenvolvedora do Lustre.
O LustreFS é um sistema de arquivos paralelo e distribuído que provê escalabilidade, alto
desempenho (HPC) e alta disponibilidade (HA) para um agrupamento de computadores. Ele pode atingir,
com isto, "dezenas de milhares de nós e petabytes de capacidade de armazenamento, sem comprometer a
estabilidade e a segurança do sistema" (SANTOS, 2006, p.158). Ele utiliza uma interface padrão POSIX
(Portable Operating System Interface [for Unix]). POSIX pode ser definido como "um padrão de definição
de interface para o sistema operacional Linux" (SAWAYA, 1999, p.360).
Segundo Hermann, o Lustre possui uma arquitetura de distribuição "que oferece a possibilidade de
ter nós operando em pares replicados (active/failover), o que aumenta a disponibilidade do sistema" (2006,
p.19). Os pares replicados se aplicam ao MDS (Metadata Servers) e OSS (Object Storage Servers). Em
relação à arquitetura do Lustre, ela é composta por três camadas básicas (como visto na Figura 1):
 Clientes: acessam o sistema de arquivos;
 Servidores de Metadados (MDS): gerenciam os nomes e diretórios no sistema de arquivos, além
das permissões e atributos estendidos para cada objeto. O MDS compreende ainda de um Disco
de Armazenamento de Metadados ou Metadata Target (MDT) e um Serviço de Gerenciamento
ou Management Service (MGS);
 Servidores de Armazenamento de Objeto (OSSs): são responsáveis pelo armazenamento e
transferência de dados de um arquivo, ou seja, disponibilizam os serviços de entrada/saída. O
OSS pode escalar um ou vários Discos de Armazenamento de Objetos ou Object Storage Target
(OSTs) em sua arquitetura, sem necessidade de interromper a execução do Lustre.
Pitanga argumenta que, "aumentar a capacidade do sistema de arquivos e largura de banda do
cluster pode ser feito facilmente, adicionando servidores de objetos e as unidades de armazenamento sem a
necessidade de interromper o cluster" (2008, p.286). Ele complementa ainda que a capacidade de
armazenamento presente no sistema de arquivos do Lustre é o somatório total do tamanho de todos os
volumes presentes na arquitetura., por exemplo, cinco servidores OSS com 10GB de volume provêm um
sistema de arquivos com capacidade total de 50 GB em sua estrutura.
Figura 1 – Lustre File System (KLING-PETERSEN, 2009)
Segundo Hermann (2006), o funcionamento do Lustre ocorre da seguinte maneira: conforme ilustra a
Figura 1: cliente necessita acessar um determinado arquivo num dos discos de armazenamento, o acesso
ocorre de forma indireta, pois antes é preciso passar pelo servidor de metadados (MDS) para se descobrir a
localização do arquivo desejado. Após a obtenção da localização, o acesso ocorre de forma direta, assim o
cliente pode ler e escrever dados no disco de armazenamento. O servidor de metadados não faz parte da
transferência do arquivo, sua função é armazenar o metadado que contém a localização do arquivo e permitir
que o cliente altere os atributos de um arquivo, como por exemplo, aumentar o tamanho do arquivo. A
alteração do atributo no MDS permite que o arquivo modificado seja visível para os demais clientes.
2.7
O projeto Apache Hadoop
O projeto Hadoop foi desenvolvido por Doug Cutting, o criador do Apache Lucene. A proposta deste
framework surgiu como um motor de pesquisa em código aberto para a Rede Mundial de Computadores ou
World Wide Web (WWW). Este projeto foi introduzido oficialmente em 2006, numa parceira entre Cutting e
o site de pesquisa Yahoo. Uma união entre o modelo de processamento distribuído de dados chamado
MapReduce, desenvolvido pelo Google, e o sistema de arquivos HDFS, criado pelo Doug Cutting. Mas o
lançamento definitivo do projeto Apache Hadoop ocorreu em janeiro de 2008, de lá até hoje, uma grande
variedade de empresas e organizações se somam à estratégia empresarial da comunidade Hadoop, como
Yahoo, Last.fm, New York Times (NYT) e Facebook (WHITE, 2009).
Conforme Taurion (2009), como um exemplo da eficiência na utilização do Hadoop, em fevereiro de
2008, foi disponibilizado um link dentro da página oficial do jornal americano NYT com nome de Times
Machine. O NYT digitalizou os jornais do ano 1851 até 1989, gerando em torno de 11 milhões de artigos
deste acervo. De posse dos artigos digitalizados no formato TIFF, com cerca de 4 terabytes, o NYT utilizou o
framework Hadoop para converter estes arquivos para o formato PDF, gerando um total de 1,5 terabytes
neste novo formato. Foi utilizado o modelo de programação paralela do Hadoop juntamente com 100
máquinas alugadas através da Amazon Elastic Cloud Computing (Amazon's EC2), que presta serviços em
computação em nuvens para a comunidade internacional. O processo de conversão dos arquivos levou menos
de vinte e quatro horas, a um custo de 240 dólares. Com isto, "o Hadoop deverá ser a base tecnológica para
o desenvolvimento de novas aplicações Open Source orientado para operar especificamente em nuvens"
(TAURION, 2009, p.52). O NYT hospedou publicamente em seu site somente as reportagens até o ano de
1922, entretanto, todo o acervo está disponível para os assinantes do jornal.
Atualmente, o projeto Apache Hadoop está relacionado com diversos subprojetos de grande
importância para a computação distribuída, que o torna mais confiável e escalável. Toda a infra-estrutura
desta arquitetura é hospedada pela Apache Software Foundation e baseada em softwares de código aberto.
Como pode ser visto na Figura 2, o projeto contempla nove subprojetos, sendo que o sistema de arquivos
HDFS e o processador de dados MapReduce são os softwares mais importantes do framework Hadoop
(WHITE, 2009).
A seguir, é exibida uma breve descrição de cada um dos subprojetos pertencentes ao Apache
Hadoop, sendo que o Core foi renomeado para Hadoop Common, mesmo que pareçam estar juntos são
projetos independentes um do outro.
Figura 2 – Subprojetos do Apache Hadoop (WHITE, 2009)
 Pig: é uma plataforma para analisar grande quantidade de fluxo de dados, contendo uma
linguagem de alto nível, programas de análise de dados e uma infra-estrutura de avaliação. Utiliza
a paralelização para lidar com grande quantidade de dados, além do HDFS e MapReduce;
 Chawka: é um sistema de coleta de dados para gerenciamento de grandes sistemas distribuídos.
Ele usa o HDFS para coletar e armazenar os dados e o MapReduce para gerar relatórios;
 Hive: é um depósito de dados distribuídos. Ele administra dados armazenados em HDFS e
fornece uma linguagem de consulta de dados baseada em SQL;
 HBase: é uma base de dados distribuída e escalável, que suporta uma estrutura de armazenamento
de dados para tabelas grandes. Ele usa o HDFS para armazenar sua base e MapReduce para os
pontos de consulta (e leituras aleatórias);
 MapReduce: é um modelo de processamento distribuído de dados que visa processar vastas
quantidades de dados em paralelo através dos nós de grandes conjuntos computacionais
agrupados (ou clusters);
 HDFS: é um sistema de arquivos distribuído que cria uma divisão dos dados da entrada em
tamanhos iguais e distribui entre os nós de um cluster para permitir segurança e rapidez no
processamento de dados, agrega um sistema de replicação destes dados;
 Zoo Keeper: é um serviço de coordenação de alto desempenho para aplicações distribuídas.
Usado para manter as informações de configuração, nomes, além de fornecer sincronização
distribuída e serviços de grupo;
 Common (ex-Core): é um conjunto de componentes e interfaces comuns para ser utilizado em
sistemas distribuídos e dispositivos de E/S. (Serialização através de RPC e estruturas de dados
persistentes);
 Avro: um sistema de serialização de dados que fornece uma integração dinâmica com linguagens
de scripting. Ele é composto de: um recipiente para armazenar dados persistentes, formato de
dados binário eficiente e chamada de procedimento remoto ou Remote Procedure Call (RPC).
2.7.1
Sistemas de arquivos distribuídos Hadoop (HDFS)
O segundo sistema de arquivos que terá seu desempenho testado é um subprojeto do framework
Apache Hadoop com nome de Sistema de Arquivos Distribuídos Hadoop ou Hadoop Distribuited File
System (HDFS). Na seção 3 será possível fazer a comparação entre os dois sistemas de arquivos LustreFS e
HDFS estudados neste projeto.
O sistema de arquivos distribuído HDFS surgiu para resolver eventuais problemas com falhas de
equipamentos, através da utilização da replicação dos dados. Estes problemas são comuns quando se utiliza
um grande número de máquinas dependentes uma das outras para realizar uma determinada tarefa. Conforme
Kassick, para solucionar este problema, "os dados do HDFS são sempre replicados em diversos servidores
para garantir tolerância a falhas" (2010, p.36), ou seja, cópias redundantes estão sempre disponíveis quando
ocorre qualquer problema com hardware, com isto, evita-se a perda de dados. Esta é uma das características
da arquitetura HPC que está presente no projeto Hadoop.
Os sistemas heterogêneos, que utilizam clusters com máquinas de diversas marcas e com diferentes
características, estão mais suscetíveis a inoperância através de falhas em hardware. A solução encontrada
pelo HDFS, com a replicação dos dados, proporcionou um eficiente trabalho, não só com sistemas
homogêneos, mas também com sistemas heterogêneos. Quando o sistema perde contato com algum
equipamento devido a alguma falha, outro equipamento é colocado no lugar mantendo o sistema
funcionando ininterruptamente, estes processos ocorrem com a abstração dos programadores das tarefas de
paralelização (WHITE, 2009).
A prioridade na arquitetura HDFS é a alta vazão dos dados e a baixa latência. Ela foi desenhada para
aplicações eficientes, como clusters, que gerenciam grandes quantidades de dados. Segundo White, "O
HDFS é um sistema de arquivos projetado para armazenar arquivos muito grandes com streaming data
access padrões, sendo executado em clusters de hardware comuns" (2009, p.41). Esta frase de White pode
ser desmembrada nas seguintes explicações: arquivos muito grandes, algumas vezes, giram em torno de
terabytes ou petabytes. O HDFS acessa os dados continuamente (streaming data access) com abordagem
write-once/read-many-times, ou seja, grava uma vez e lê muitas vezes. Os dados são gerados uma única vez
na origem, e lidos diversas vezes ao longo do tempo, durante as execuções paralelas. Por fim, clusters de
hardware comuns consistem num agrupamento de máquinas disponibilizadas de vários fornecedores e
suscetíveis a falhas, que agrupadas proporcionam um sistema HPC altamente confiável.
A arquitetura do HDFS "consiste em um servidor de metadados centralizado chamado NameNode e
diversos servidores de dados, os DataNodes. Os dados são divididos em blocos que são distribuídos entre os
DataNodes" (KASSICK, 2010, p.36). Existe uma replicação automática dos dados para diversos DataNodes
nos diversos racks da rede. Em relação às políticas empregadas, o que se busca com o HDFS é ter máxima
vazão e perda mínima de dados, seja por falhas em disco ou em algum DataNode, seja por problemas mais
graves como a queda da operabilidade de racks inteiros.
Ainda há dois fatores importantes que devem ser observados nesta arquitetura: em primeiro lugar,
não é permitido que um arquivo seja gravado por mais de um cliente ao mesmo tempo. Há um eficiente
mecanismo de consistência que auxilia no controle dos dados no servidor de metadados ou NameNodes. O
segundo é priorizar a execução de aplicações próximas à máquina de origem ou naquela em que os dados
residem. Quando os nós de execução se encontram distantes dos DataNodes, os dados devem ser transferidos
pela rede e não está descartada a possibilidade de um grande congestionamento na rede e, conseqüentemente,
um baixo desempenho da mesma (KASSICK, 2010).
3 METODOLOGIA PARA IMPLEMENTAÇÃO DO LUSTREFS E HDFS
A implementação deste projeto aconteceu no Laboratório da Legere Sistemas Dinâmicos, que tem
uma parceria com o Instituto de Inovação e Pró-Reitoria de Pesquisa e Pós Graduação da Ulbra, situado no
Centro Tecnológico da Ulbra em Canoas, sala 209 do prédio 14.
As etapas necessárias para o desenvolvimento deste projeto, denominado Rede Legere, envolveram
as seguintes implementações: montagem e configuração de um agrupamento de computadores ou cluster,
instalação e configuração dos sistemas de arquivos LustreFS e HDFS e, por fim, a instalação e configuração
de uma ferramenta de gerência de redes, o Cacti. Todas estas etapas estão documentadas no decorrer deste
capítulo.
3.1 Montagem e configuração de um agrupamento de computadores ou cluster HPC
Para se construir um cluster HPC, foi necessário agrupar diversos computadores num ambiente
apropriado, além de instalar o sistema operacional Linux em cada um dos nós e configurar a rede e os
serviços de rede, como DHCP, DNS e SSH, que serão apresentados mais adiante na subseção 3.1.1. Estes
serviços de rede são necessários para o correto funcionamento e gerenciamento de um cluster de alto
desempenho.
3.1.1 Montagem do cluster HPC
Um ambiente de rede heterogêneo foi construído para a execução dos testes de desempenho entre os
dois sistemas de arquivos estudados. Os testes podem ser vistos no capítulo 4 deste trabalho. Neste ambiente,
seis computadores foram interligados através de switches. No servidor principal Kaigang foi instalado o
sistema operacional Linux Ubuntu Server 64bits - versão 8.10. Em uma das máquinas chamada de Rgrande
foi instalado o RedHat Enterprise Linux Server 5.5, optou-se por essa distribuição Linux, pois ela se adaptou
melhor à instalação do Lustre.
Nas demais máquinas, Fontoura, Farroupilha e Feliz e Guaíba, foi escolhido o Linux Ubuntu Generic
x86 - versão 8.10. As seis máquinas abrangeram quatro modelos distintos de hardware: o servidor Kaigang
era um Server Intel Core 2 Duo E4300. Farroupilha, Feliz e Guaíba eram um Dell Power Edge 1300,
Fontoura, um Dell Power Edge 600SC e Rgrande, um Intel Core 2 Duo E7400. Portanto, a rede pôde ser
considerada uma arquitetura heterogênea. Na Figura 3 é apresentado o cenário original do ambiente
clusterizado contendo detalhes como: nomes de domínio, relação de endereços IPs, quantidades e tipos de
disco existentes, portas e placas de rede, versão do Kernel do Linux, serviços de rede, bem como, o SO, login
e a senha utilizados em cada computador da rede.
No servidor Kaigang existem duas placas de rede plugadas na placa-mãe. O servidor Kaigang era o
front-end do cluster. Assim, a montagem física do agrupamento de computadores de alto desempenho
(cluster HPC) ficou concluída, sendo necessário apenas configurar os serviços de rede que serão detalhados
na subseção 3.1.2.
No Kaigang, foi configurado o servidor Dynamic Host Configuration Protocol (DHCP) com objetivo
de automatizar o endereçamento de rede IP. Neste projeto, foi selecionado um range com noventa endereços
IPs, contemplando 172.16.1.10 até 172.16.1.99, mas foram usados apenas seis deles, como mostra a Figura
3.
O servidor Domain Name System (DNS) foi configurado para atribuir nomes para cada um dos
endereços IPs contemplados pelo servidor DHCP. No servidor Kaigang, o arquivo /etc/dhcp3/dhcpd.conf foi
configurado para fixar-se os endereços IPs por endereços de máquina (mac).
O Secure Shell ou servidor SSH, segundo Marimoto (2008), serve para administrar o servidor. Com
ele é possível transferir arquivos, executar comandos, rodar e instalar aplicativos remotamente. Desta forma,
toda a rede pôde ser gerenciada diretamente do prompt de comando do servidor Kaigang. Para habilitar o
funcionamento do SSH de forma automática, foi preciso gerar uma chave pública que fosse entendida por
todas as máquinas do cluster. Após a configuração do SSH, o acesso às máquinas ocorreu sem necessidade
de colocação manual de senha. Por exemplo, através do Terminal Console, o acesso direto entre o servidor
Kaigang e a máquina Feliz se dava por um destes três comandos: ssh [email protected] ou ssh root@feliz ou
ainda ssh feliz.
Linux Ubuntu Generic x86
- versão 8.10
CLUSTER HPC
eth0
Linux Ubuntu Generic x86
- versão 8.10
eth0
KAIGANG SERVER
IP: 172.16.1.10 (eth0)
IP externo (WEB)
10.2.9.102 (eth1)
/dev/sda: 160.0 GB
Kernel - 2.6.24-28-Gen
Login: Root
Password: ht4gt4rs
Servidor DHCP
Servidor SSH
Servidor DNS
Modelo
CLIENTE/SERVIDOR
Linux Ubuntu Server 64bits
- versão 8.10
Switch D-Link-1016D
18 Portas
eth0
Linux Ubuntu Generic x86
- versão 8.10
eth0
eth1
Switch 3.com
24 Portas
Linux Ubuntu Generic x86
- versão 8.10
eth0
RedHat Enterprise Linux
Server 5.5
Internet
eth0
SLAVE 1 FARROPILHA
IP: 172.16.1.13 (eth0)
/dev/sda – 9 GB
/dev/sdb – 9 GB
/dev/sdc – 9 GB
Kernel - 2.6.27-17-Gen
Login: Root
Password: ht4gt4rs
Servidor SSH
Servidor DNS
SLAVE 2 FONTOURA
IP: 172.16.1.14 (eth0)
/dev/sda – 36 GB
/dev/sdb – 9 GB
Kernel - 2.6.27-14-Gen
Login: Root
Password: ht4gt4rs
Servidor SSH
Servidor DNS
SLAVE 3 - FELIZ
IP: 172.16.1.15 (eth0)
/dev/sda – 9 GB
/dev/sdb – 9 GB
Kernel - 2.6.27-7-Gen
Login: Root
Password: ht4gt4rs
Servidor SSH
Servidor DNS
SLAVE 4 - GUAIBA
IP: 172.16.1.16 (eth0)
/dev/sda – 9 GB
/dev/sdb – 9 GB
Kernel - 2.6.27-14-Gen
Login: Root
Password: ht4gt4rs
Servidor SSH
Servidor DNS
SLAVE 6 - RGRANDE
IP: 172.16.1.18 (eth0)
/dev/hdb – 40 GB
/dev/hdc – 40 GB
/dev/sda – 500 GB
Kernel - 2.6.18-194
Login: Root
Password: ht4gt4rs
Servidor SSH
Servidor DNS
Figura 3 – Esquema do Agrupamento de Computadores ou Cluster HPC
3.2
Instalação e configuração dos sistemas de arquivos LustreFS e HDFS
Nesta seção, serão apresentadas a instalação e configuração dos dois sistemas de arquivos escolhidos
para este projeto. Na subseção 3.2.1, é detalhada a instalação e configuração do sistema de arquivos
LustreFS. Na subseção 3.2.2, é descrita a implementação e configuração do sistema de arquivos HDFS.
Ambos apresentam seus principais serviços e dependências. O LustreFS foi instalado na máquina Rgrande.
Já o HDFS foi instalado em cinco máquinas, Kaigang, Farroupilha, Fontoura, Feliz e Guaiba.
3.2.1 Instalação e configuração do LustreFS
Os códigos de instalação do Lustre encontram-se disponíveis para download no site oficial da Sun
Microsystems: http://www.sun.com/download/. As versões escolhidas do LustreFS e do SO, respectivamente,
foram: Lustre.1.8.4.i686 e Red Hat Enterprise Linux Server 5.5.
Um dos pré-requisitos para uma instalação efetiva do LustreFS exige que o Kernel do Linux tenha
que ser recompilado. Por isso, optou-se pela montagem do LustreFS somente na máquina Rgrande, uma vez
que instalá-lo em outras máquinas poderia inviabilizar as configurações prévias de outros sistemas de
arquivos e da ferramenta de monitoração presentes na rede. O Lustre.1.8.4.i686 utilizou os seguintes binários
como requisitos para uma instalação bem sucedida no cluster:







e2fsprogs-1.41.10.sun2-0redhat.rhel5.i386.rpm;
kernel-2.6.18-194.3.1.el5_lustre.1.8.4.i686.rpm;
lustre-ldiskfs-3.1.3-2.6.18_194.3.1.el5_lustre.1.8.4.i686.prm;
lustre-source-1.8.4-2.6.18_194.3.1.el5_lustre.1.8.4.i686.rpm;
lustre-1.8.4-2.6.18_194.3.1.el5_lustre.1.8.4.i686.rpm;
lustre-modules-1.8.4-2.6.18_194.3.1.el5_lustre.1.8.4.i686.rpm;
lustre-client-modules-1.8.4-2.6.18_194.3.1.el5_lustre.1.8.4.i686.
Foi necessário seguir alguns procedimentos e verificações para se obter êxito na instalação do
LustreFS. Utilizaram-se dois discos rígidos secundários para essa instalação: um para o Servidor de
Metadados (MDS) que contém o Disco de Armazenamento de Metadado (MDT) e o Serviço de
Gerenciamento (MGS) e outro para o Servidor de Armazenamento (OSS) que contém o Disco de
Armazenamento de Objetos (OST). O primeiro HD, alocado no diretório dev/hdb e com 40 GB de espaço,
usou a partição dev/hdb2 para configurar o Lustre-MDS-MDT. O segundo HD, alocado no diretório dev/sda
e com 500 GB de espaço, teve três partições formatadas com 100 GB de espaço cada uma, e numa delas, a
partição dev/sda1, foi configurado o Lustre-OSS-OST, como pode ser visto na Figura 4 da subseção 3.2.2. A
instalação do cliente, por ser opcional, não foi utilizada neste projeto. As principais etapas da instalação do
LustreFS na máquina Rgrande foram:
 Arquivo de módulos do LustreFS: editou-se o arquivo de módulos /etc/modprobe.conf e incluiuse a placa de rede eth0 no seguinte comando:
options lnet networks=tcp(eth0);
 Formatação do MGS/MDT: criou-se um combinado MGS/MDT na partição /dev/hdb2 para ser
formatado através do comando:
mkfs.lustre --fsname=spfs --reformat --mdt --mgs /dev/hdb2;
 Ponto de montagem do MGS/MDT: adicionou-se um ponto de montagem no diretório /mnt com a
seguinte instrução:
mkdir -p lustre-mgs-mds;
 Montagem do MGS/MDT: montou-se o combinado MGS/MDT na partição /dev/hdb2 com o
seguinte comando:
mount -t lustre /dev/hdb2 /mnt/lustre-mgs-mds;
 Formatação do OSS/OST: criou-se um combinado OSS/OST na partição /dev/sda1 para ser
formatado através do comando:
mkfs.lustre --fsname=spfs --reformat --ost --mgsnode=172.16.1.18@tcp0 /dev/sda1;
 Ponto de montagem do MGS/OST: adicionou-se um ponto de montagem no diretório /mnt com a
seguinte instrução:
mkdir -p lustre-ost;
 Montagem do OSS/OST: montou-se o combinado OSS/OST na partição /dev/sda1 com o
comando:
mount -t lustre /dev/sda1 /mnt/lustre-ost;
 Edição do arquivo /etc/fstab: editou-se o arquivo /etc/fstab e incluíram-se os discos e os pontos de
montagem do MGS/MDT e OSS/OST com a adição das seguintes linhas neste arquivo:
/dev/hdb2 /mnt/lustre-mgs-mds lustre defaults,_netdev 0 0 e /dev/sda1 /mnt/lustre-ost lustre
defaults,_netdev 0 0;
 Verificação do Lustre: para verificar se o Lustre está rodando, usou-se a instrução lctl list_nids. A
resposta correta deste comando foi 172.16.1.18@tcp. Entretanto, se ocorrer algum erro nesta
verificação, faz-se necessário carregar e atualizar novamente os módulos do Lustre. Para isso,
usou-se o comando:
modprobe -v lustre;
 Outros comandos para verificação são: lctl ping 172.16.1.18 e lctl device_list, o primeiro
comando verifica se o IP está ativo no Lustre e o segundo exibe uma lista com todos os serviços
do Lustre em execução;
 Instalação da ferramenta de monitoração Cacti, idêntica utilizado na máquina kaigang;
 Ler e gravar um arquivo no LustreFS: dentro do diretório /Lustre, foi executado o comando
dd if=/dev/zero of=/lustre/zero.dat bs=80M count=10.
Este comando gerou um arquivo de 8GB com nome de zero.dat, este processo foi monitorado
pelo Cacti para capturar o desempenho da máquina local Rgrande.
 Por fim se pode verificar a configuração dos dispositivos com o LustreFS através do comando:
lctl device_list
0 UP mgs MGS MGS 5
1 UP mgc MGC172.16.1.18@tcp 2bb93da1-d841-2730-4206-5a569f15f143 5
2 UP mdt MDS MDS_uuid 3
3 UP lov spfs-mdtlov spfs-mdtlov_UUID 4
4 UP mds spfs-MDT0000 spfs-MDT0000_UUID 3
5 UP ost OSS OSS_uuid 3
6 UP obdfilter spfs-OST0000 spfs-OST0000_UUID 5
7 UP osc spfs-OST0000-osc spfs-mdtlov_UUID 5
3.2.2 Instalação e configuração do HDFS
Os códigos de instalação do Hadoop encontram-se disponíveis para download no site oficial do
Apache: http://www.apache.org - The Apache Software Foundation. A versão Hadoop-0.20.2 utilizada nesta
instalação foi obtida num dos repositórios oficiais.
Uma configuração bem sucedida do Hadoop considera que os três pré-requisitos fundamentais de
instalação devam ter sido cumpridos satisfatoriamente. Na Figura 4 é possível observar estes pré-requisitos,
que são:
 Java 6 SDK ou superior: é preciso utilizar uma versão igual ou superior ao Java-1.6.x SDK. Neste
cluster foi utilizado o Java-6-Sun. O Java é necessário, pois o Hadoop utiliza a linguagem Java
para a construção de um WebService para o tratamento das requisições vindas do cliente, além de
uma interface para mostrar a execução de seus processos e exibir os slaves do cluster;
 SSH ou Secure Shell: já mencionado na subseção 3.1.2. O Hadoop também necessita do servidor
SSH, pois, durante sua execução, uma conexão formada entre o servidor Kaigang e cada slave
deve ocorrer de forma automática e transparente, sem nenhuma validação de login ou senha;
 usuário dedicado: em todas as estações deve ser utilizado um usuário dedicado. Neste cluster
utilizou-se o usuário supervisor. É um requisito recomendado porque separa a instalação do
Hadoop de outros softwares e contas de usuário em execução, favorecendo quesitos como:
segurança, permissões, backups, etc. Esta etapa considera que o SSH já tenha sido implementado
corretamente em todas as estações, conforme visto no item anterior.
A configuração do Hadoop no servidor e em cada um dos quatro slaves é idêntica, portanto é
necessário que se instale o Hadoop no servidor como se fosse um nó e após alterar a configuração em cada
uma das estações ou slaves. Os passos da instalação são:
 Diretório de instalação: foi escolhido o diretório /usr/local/hadoops para instalar o Hadoop em
todas as estações da rede;
 Versão do Java instalado: no diretório/usr/local/hadoops/conf alterar a variável de ambiente
hadoop-env.sh com o nome e o caminho das instalação do Java na máquina, através do comando:
export JAVA_HOME=/usr/lib/jvm/Java-6-Sun;
 Arquivos de configuração do Hadoop: no diretório /usr/local/hadoops/conf editou-se os três
arquivos de configuração do Hadoop: core-site.xml, mapred-site.xml e hdfs-site.xml. No primeiro
e no segundo foi indicado o nome do servidor e a porta utilizada, respectivamente, kaigang:54310
e kaigang:54311. No terceiro foi necessário definir a quantidade de replicação dos dados como
"3", que é o número padrão para o máximo de replicações utilizado pelo Hadoop;
 Formatar o namenode: a formatação do namenode foi feita apenas uma vez durante a
configuração do Hadoop. Só em casos emergenciais é permitido reformatar o namenode. Para
formatar utilizou-se o comando bin/hadoop namenode -format dentro do diretório
/usr/local/hadoops/.
 Executar, verificar e parar a execução do Hadoop: dentro do diretório /usr/local/hadoops/, os
comandos utilizados para executar e parar, de uma só vez, todos os serviços do Hadoop,
respectivamente, são: bin/start-all.sh e bin/stop-all.sh.
 Inicializar individualmente o HDFS, usa-se o bin/start-dfs.sh e para encerrá-lo usa-se bin/stopdfs.sh. Já o MapReduce, é executado através do bin/start-mapred.sh e encerrado com o bin/stopmapred.sh. O comando jps é utilizado para verificar se o Hadoop está rodando.
 Configurar os arquivos mestre e escravos: editar o arquivo /usr/local/hadoops/conf/masters e
adicionar o nome do servidor "kaigang" como servidor mestre. Também foi editado o arquivo
/usr/local/hadoops/conf/slaves, colocando-se novamente o servidor mestre e incluindo-se também
o nome dos 5 hosts numa seqüência vertical, desta forma: "Kaigang", "Fontoura", "Farroupilha",
"Feliz" e "Guaiba";
 Executar a leitura de um arquivo no Hadoop: durante a execução do HDFS, é possível ler um
arquivo utilizando-se a seguinte instrução:
bin/hadoop dfs -copyFromLocal /opt/nome_do_arquivo ~/opt/input/input.
Este comando foi executado dentro do diretório /usr/local/hadoops/, com isso, o HDFS começou
a ler o arquivo e armazenar os eventos na pasta ~/opt/input/input.
HDFS, LustreFS e
Ferramenta CACTI
Linux Ubuntu Generic x86
- versão 8.10
eth0
Linux Ubuntu Generic x86
- versão 8.10
KAIGANG SERVER
IP: 172.16.1.10 (eth0)
Login: Root
Password: ht4gt4rs
HDFS-HADOOP-0.20.2
JAVA-6-SUN
SSH
BROWSER FIREFOX
USUÁRIO DEDICADO:
Root
CACTI no KAIGANG
Data Base MySQL
Web Server Apache
Script PHP
SNMP Agent
Benchmark CACTI
SEA MONKEY
Ferramenta RRDTool
eth0
Linux Ubuntu Server 64bits
- versão 8.10
Switch D-Link-1016D
18 Portas
eth0
Linux Ubuntu Generic x86
- versão 8.10
eth0
eth1
Switch 3.com
24 Portas
Linux Ubuntu Generic x86
- versão 8.10
eth0
(Cacti também foi
instalado na máquina
Rgrande)
SLAVE 1 FARROPILHA
IP: 172.16.1.13 (eth0)
Login: Root
Password: ht4gt4rs
HADOOP-0.20.2
JAVA-6-SUN
SSH
USUÁRIO DEDICADO:
Root
SLAVE 2 FONTOURA
IP: 172.16.1.14 (eth0)
Login: Root
Password: ht4gt4rs
HADOOP-0.20.2
JAVA-6-SUN
SSH
USUÁRIO DEDICADO:
Root
SLAVE 3 - FELIZ
IP: 172.16.1.15 (eth0)
Login: Root
Password: ht4gt4rs
HADOOP-0.20.2
JAVA-6-SUN
SSH
USUÁRIO DEDICADO:
Root
SLAVE 4 - GUAIBA
IP: 172.16.1.16 (eth0)
Login: Root
Password: ht4gt4rs
HADOOP-0.20.2
JAVA-6-SUN
SSH
USUÁRIO DEDICADO:
Root
RedHat Enterprise Linux
Server 5.5
Internet
eth0
SLAVE 6 - RGRANDE
IP: 172.16.1.18 (eth0)
Login: Root
Password: ht4gt4rs
LustreFS
hdb2 – 40 GB (MDS,
MDT e MGS)
hdc1 – 36 GB (RedHat)
sda1 – 100 GB (OSS e
OST)
Kernel - 2.6.18-194
Login: Root
Password: ht4gt4rs
Figura 4 – Esquema da Instalação do HDFS, LustreFS e Cacti
 Interface Web: o Hadoop utiliza uma interface Web para exibir todos os processos que estão
sendo executados pelo sistema de arquivos. Com o Hadoop rodando, acessou-se o endereço
http://localhost:50030 pelo browser que mostrou todos os processos jobtracker do Mapreduce (o
jobtracker é o processo mestre). O endereço, http://localhost:50060 mostrou quais task trackers
estão ou não rodando (o task tracker é o processo escravo que roda em cada nó executor de
tarefas) e, por último, o endereço http://localhost:50070 que permitiu visualizar os namenodes
que executavam dentro do cluster.
3.3
Aplicação da ferramenta de monitoração Cacti
Neste trabalho, a ferramenta que proporcionou uma análise de desempenho entre os sistemas de
arquivos LustreFS e HDFS foi o Cacti. O Cacti necessita de um servidor de banco de dados (DB), de um
servidor Web, de um browser, de um script de linguagem de programação e de um protocolo de gerência de
redes, como pode ser visto na Figura 3. Considerou-se relatar apenas a instalação do Cacti no servidor
Kaigang, entretanto uma instalação semelhante também ocorreu na máquina Rgrande, que foi utilizada
localmente para executar os testes de desempenho do sistema LustreFS.
3.3.1 Instalação e configuração do servidor de banco de dados MYSQL
A ferramenta Cacti utiliza um servidor de banco de dados MYSQL para armazenar com segurança os
dados coletados durante o seu processo de captura. Conforme Marimoto (2008), o acesso ao banco de dados
se dá através de uma linguagem de programação específica, por exemplo, PHP, linguagem C ou C++. A
versão do MYSQL instalada no servidor Kaigang foi MYSQL-5.0.49. Conforme Costa (2008), a
configuração deste BD relacionou as seguintes etapas:
 Criou-se, respectivamente, um grupo e um usuário MYSQL através dos comandos groupadd
mysql e useradd -d /dev/null -s /bin/false -g mysql mysql;
 Obteve-se através do site oficial http://www.mysql.com a última versão do pacote.
 Habilitaram-se os logs de transações para visualizar os eventos gerados pelas ferramentas de
monitoração do Cacti, para isso, editou-se o /etc/my.cnf incluindo ao final da tabela a linha log =
/var/log/mysql/mysqld.log.
 Colocou-se o script de inicialização do MYSQL /etc/init.d/mysql no boot do Linux Ubuntu.
 Verificou-se a execução do DB através do comando netstat -nat | grep 3306 para confirmar a
execução DB, bem como, a porta que está sendo utilizado pelo servidor MYSQL. O resultado
deste comando foi:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* Ouça.
3.3.2 Instalação e Configuração do servidor Web Apache
Além do MYSQL, que foi utilizado para armazenar os dados coletados durante a execução dos testes
de desempenho, utilizou-se ainda uma página Web para apresentar seus resultados. Houve necessidade,
portanto, de um servidor HTTP para hospedar essa página. A versão do servidor Apache instalada no
servidor Kaigang foi Apache-2.2.16. Conforme Costa (2008), a configuração do servidor Apache envolveu
as seguintes etapas:
 Criou-se, respectivamente, um grupo e um usuário www-data através dos comandos groupadd
www-data e useradd -g www-data -s /bin/false -d /dev/null www-data.
 Obteve-se através do site oficial http://www.apache.org a última versão do pacote;
 Colocou-se o script de inicialização do Apache em /etc/init.d/apache2 no boot no Linux;
 Verificou-se a execução do Apache através dos processos que estão sendo executados pelo
servidor, bem como a porta que está sendo utilizada, através dos comandos ps -ef | grep httpd e
netstat -nat | grep 80. O resultado deste último comando foi:
tcp 0 0 0.0.0.0:80 0.0.0.0:* OUÇA.
3.3.3
Instalação e configuração do suporte à linguagem PHP (Personal Home Page)
Além do MYSQL e do Apache, o Cacti necessitou da instalação do suporte à linguagem de
programação PHP (ou script PHP), que viabilizou a criação de páginas com muito mais rapidez e segurança.
A versão do script PHP instalado no servidor Kaigang foi PHP-5.2.14. Conforme Costa (2008), a
configuração do PHP abrangeu as seguintes etapas:
 Obteve-se através do site oficial http://www.php.net a última versão do pacote.
 Criou-se o arquivo de log com o comando touch /var/log/apache2/php_error.log para as
mensagens de erro do PHP ficaram armazenadas neste arquivo.
 Ajustaram-se as permissões ao PHP com os comandos:
chown -R root.www-data /usr/local/lib/php e chmod -R g-w,o-rwx /usr/local/lib/php.
 Ativou-se o suporte ao Apache com a edição do arquivo /etc/apache2/httpd.conf onde foram
incluídos três módulos do PHP:
LoadModule php5_module, libexec/libphp5.so e AddModule mod_php5.c.
 Reiniciou-se o Apache e verificou-se o funcionamento do PHP através do comando php -v para
verificar a versão instalada do PHP e lynx -dump -head http://localhost para ver se ele estava
rodando. A resposta deste último comando foi:
HTTP/1.1 200 OK.
3.3.4
Instalação e Configuração do protocolo SNMP (Simple Network Management Protocol)
O Cacti necessitou que o agente SNMP estivesse instalado e configurado no servidor Kaigang.
Conforme Costa (2008), "o SNMP é um protocolo de gerência típica de redes TCP/IP, da camada de
aplicação que facilita o intercâmbio de informação entre os dispositivos de rede" (2008, p.21). A versão do
SNMP instalado no servidor Kaigang foi SNMP-5.2.1.2. Conforme Costa (2008), a configuração do SNMP,
resumidamente, contou com as seguintes etapas:
 Foi baixado o pacote SNMP através do comando apt-get install snmpd.
 Editou-se o arquivo /etc/snmp/snmpd.conf com a adição do Localhost do servidor, que era
172.16.1.10, e a comunidade chamada de InfoMONITOR.
 Testou-se a consulta no SNMP, através do comando snmpwalk -v1 -c infoMONITOR 172.16.1.10.
Como resposta, ele mostrou a versão do SNMP e várias informações sobre os dispositivos
gerenciados.
 Realizou-se diversas consultas com o agente SNMP, através do comando snmpwalk ou snmpget.
O comando snmpwalk -v2c -c infoMONITOR localhost listou diversas informações dos
dispositivos gerenciados.
3.3.5
Instalação e configuração do Cacti
"Cacti é uma ferramenta que recolhe e exibe informações sobre o estado de uma rede de
computadores através de gráficos. [...] Monitora o estado de elementos de rede e programas bem como a
largura de banda utilizada e o uso de CPU". (COSTA, 2008, p.43).
Após todas as dependências anteriores do Cacti, como MYSQL, Apache, PHP e SNMP, estarem
executando no servidor, além da ferramenta RRDTool (Round Robin Database). Os códigos de instalação do
Cacti encontram-se disponíveis para download no site oficial: http://www.cacti.net. A versão utilizada neste
projeto foi cacti-0.8.6j. Conforme Costa (2008), a configuração do Cacti cumpriu as seguintes etapas:
 Criação da Base de dados no MYSQL: dentro da pasta /usr/local/src/cacti-0.8.7j executou-se o
comando mysqladmin -u root create cacti -p. Pediu a senha do MySQL que é 123456. Após abriu
o prompt de comando do MYSQL, onde foram adicionadas as seguintes linhas: mysql cacti <
cacti.sql -p, mysql -u root -p (pediu a senha novamente) e GRANT ALL ON cacti. *TO
cactiuser@localhost IDENTIFIED BY 'senha'; flush privileges;
 Ajuste de configurações no Cacti: dentro da pasta /usr/local/src/cacti-0.8.7j, foi editado o arquivo
include /config.php e incluído os seguintes parâmetros:
$database_default = "cacti":,
$database_hostname = "localhost":
$database_usename = "admin":
$database_password = "123456":
 Ajuste de permissões de usuário do Cacti: os comandos para ajuste de permissões do usuário
Cacti foram chown -R cactiuser rra e chown -R cactiuser log.
 Configuração de agendamento através do Crontab: editou-se o crontab -e adicionando-se a linha
*/5 * * * * php /var/www/cacti/poller.php > /dev/null 2>&1.
Uma leitura é realizada a cada 5 em 5 minutos através do crontab.
 Direcionar o Cacti para o Diretório do Apache: toda a instalação do Cacti que se encontrava no
diretório /usr/local/src foi direcionada, através de um link simbólico, para dentro do diretório raiz
do apache que é /var/www/cacti, habilitando-se o acesso do cacti como uma página Web.
3.3.6
Instalação do browser Sea Monkey
Foi instalado o navegador Sea Monkey para cumprir a última etapa de instalação do Cacti. O
processo de configuração do Cacti é simples, ou seja, através do endereço do servidor de monitoração
Kaigang: http://172.16.1.10/cacti/install/index.php, sendo aberta a página do Cacti. A configuração é
bastante intuitiva, bastando selecionar as etapas necessárias. A configuração finaliza com uma tela de login
do usuário onde foi incluído como usuário "admin" e a senha de "123456". Com isso o Cacti foi instalado
com sucesso. (COSTA, 2008, p.45-48).
As telas de configuração do Cacti não serão apresentadas neste projeto, mas podem ser consultadas
na referência do Felipe Costa "Ambiente de Rede Monitorado com Nagios e Cacti", páginas 49 até 67. No
próximo capítulo serão apresentados os todos os testes pertinentes aos dois sistemas de arquivos que estarão
sendo monitorados pelo Cacti no navegador Sea Monkey.
4 ANÁLISE DOS RESULTADOS
O LustreFS e a ferramenta de monitoração Cacti, foram instalados na máquina Rgrande para coletar
os eventos desta máquina. O HDFS, por sua vez, foi monitorado pelo Cacti instalado na máquina Kaigang.
4.1
Análise de desempenho do sistema de arquivos LustreFS
Com o comando dd if=/dev/zero of=/lustre/file-2GB.dat bs=20M count=100 foi gravado um
arquivo de 2 GB chamado de file-2GB.dat na pasta /lustre do sistema de arquivos LustreFS. O Cacti coletou
paralelamente as informações dessa máquina e as apresentou via página do browser Sea Monkey. Um script
PHP atualiza os dados coletados dinamicamente numa página Web e armazena os dados no banco de dados
MYSQL. A execução do comando ocorreu às 14h05min e terminou às 14h09min. A configuração padrão do
Cacti exibe uma atualização a cada cinco minutos, permitindo uma análise dos eventos ocorridos numa rede.
Para a análise de desempenho do sistema LustreFS utilizou-se as medidas de uso de CPU, uso de
memória e tráfego de rede na placa eth0. Nas Figura 5a, foi reunida a tela com o uso de CPU e as Figuras 5b
e 5c, com o uso de memória e a Figura 6, com o tráfego de entrada e saída da placa eth0.
Figura 5a – Uso de CPU pelo LustreFS
Figura 5b – Uso de Memória pelo LustreFS
Figura 5c – Uso de Memória Cache pelo LustreFS
Em relação ao uso de CPU, Figura 5a, o processo de gravação do arquivo file-2GB.dat, das
14h05min até 14h09min, exigiu um consumo aproximado de 18,12%. O consumo máximo de CPU é o
somatório dos processos do sistema Linux com os processos gerados pelo usuário para gravação do arquivo
citado, assim o consumo de CPU para a cópia foi de 16,00% e para o Sistema Linux 2,12%.
A memória física total da máquina Rgrande é de 3GB. A Figura 5b exibe o consumo da memória
livre que vai diminuindo aos poucos com a gravação do arquivo. No horário de gravação do arquivo, o
consumo médio de memória cache foi de 637,07MB, a Figura 5c exibe a memória cache durante o processo
de gravação do arquivo file-2GB.dat. A memória livre ficou na casa de 1.74GB. Antes da execução do
arquivo, a memória livre em média ficava em 2.0GB.
A Figura 6 apresenta o tráfego de entrada (inbound) e de saída da placa eth0 (outbound). O tráfego
de entrada máximo executado pela interface eth0 correspondeu a 12.56 bits por segundo. Já o tráfego de
saída máximo executado pela interface eth0, correspondeu a 12.57 bits por segundo. Estes valores exibem o
comportamento da placa de rede.
Figura 6 – Tráfego de Entrada e Saída da Placa eth0
4.2
Análise de desempenho do sistema de arquivos HDFS
Com o comando: bin/hadoop dfs -copyFromLocal /opt/file-2GB.dat ~/opt/input/input4, foi feita a
cópia de um arquivo de 2GB no HDFS executada dentro do diretório /usr/local/hadoops/. O execução do
comando ocorreu às 14h20min e terminou perto das 14h26min.
Para a análise de desempenho do sistema HDFS utilizou-se as medidas de uso de CPU, uso de
memória, espaço em disco e o tráfego na placa eth0. Na Figura 7a e 7b, foram reunidas as telas com uso de
CPU e de memória.
O processo de gravação do arquivo file-2GB.dat exigiu do HDFS um consumo máximo de 24,97%
de utilização de CPU, Figura 7a, o sistema Linux consumiu um máximo 2,34% de processamento e os
processos de usuário 22,63%. Comparativamente, o HDFS consumiu mais CPU que o LustreFS, isto ocorre
porque o master tem que fazer o controle dos slaves na rede.
Figura 7a – Utilização de CPU e de Uso de Memória pelo HDFS
O uso da memória total da máquina Kaigang era de 3,0GB. A Figura 7b, mostra o consumo de
memória cache de 1,94GB após a gravação do arquivo file-2GB.dat, sendo que a memória livre da máquina
ficou em média num limite aproximado de 255MB. Em comparação com o LustreFS, o HDFS usou um
menor consumo de memória cache. Os processos em execução, como HDFS Cacti, PHP, Apache e SNMP
ajudaram a comprometer o desempenho da máquina.
O disco /dev/sda/ que estava montado no servidor Kaigang possuía um espaço total de 160GB. O
comando executou a leitura e gravação dos dados neste disco. Não foi possível exibir a imagem que contém
o espaço usado pela gravação daquele arquivo utilizado pelo HDFS, porque este arquivo de 2GB foi
fragmentado em pedaços de 64MB e espalhado pelos servidores da rede de forma homogênea.
A Figura 8 apresenta o tráfego de entrada (inbound) e de saída da placa eth0 (outbound). O tráfego
de entrada máximo executado pela interface eth0 correspondeu a 449,91 bits por segundo. Já o tráfego de
saída máximo executado pela interface eth0, correspondeu a 468,03bps. Estes valores exibem o
comportamento da placa de rede.
Figura 7b – Utilização de Memória pelo HDFS
Figura 8 – Tráfego de Entrada e Saída da Placa eth0
5 CONCLUSÃO E CONSIDERAÇÕES FINAIS
De tudo que foi exposto, pode-se chegar às seguintes conclusões: os dados de desempenho dos
sistemas de arquivos LustreFS e HDFS foram coletados através de uma ferramenta de gerenciamento de
redes, onde foi possível analisar os resultados em dois cenários distintos.
Pelos dados coletados observa-se uma maior utilização de CPU proporcionado pelo HDFS em
comparação com o LustreFS. O motivo disso é que o HDFS é um framework que fica executando diversos
serviços de sincronização com os demais servidores na rede e a manutenção deste controle consome
recursos do servidor mestre, verificado antes mesmo de se iniciar os testes. Ao se iniciar a leitura/gravação
de um arquivo, o HDFS leva tempo aguardando que todos os slaves pertencentes ao seu cluster comecem a
rodar. Isto acontece porque o algoritmo de HDFS verifica a disponibilidade de recursos nos nós slaves
(como tamanho de disco disponível) de forma a manter uma distribuição homogênea destes dados ao longo
dos nós. O Lustre, por sua vez, é tratado como um disco local gerenciado por um servidor de metadados que
permite que os dados sejam acessados com sua autorização.
A análise dos dados aconteceram sobre três ou quatro tipos de testes: uso de CPU, uso de memória e
tráfego de rede na placa eth0. O desempenho do LustreFS em relação ao HDFS foi superior em todos os
aspectos monitorados. Entretanto, o HDFS faz replicações entre seus slaves equivalente a três cópias de
cada segmento do arquivo, portanto uma análise correta deve considerar que uma unidade do HDFS é mais
rápido que o LustreFS, uma vez que o LustreFS não faz replicações.
A contribuição deste projeto poderá auxiliar na busca conhecimento sobre sistemas de arquivos,
sistemas distribuídos, clusters e serviços de redes em Linux.
Para trabalhos futuros, sugere-se uma instalação do LustreFS em cluster heterogêneos onde se tente
recompilar todos os Kernels das máquinas envolvidas, observando quais conseqüências isto poderá trazer
para outros sistemas e programas já instalados no cluster.
AGRADECIMENTO(S)
Com o gosto do dever cumprido, quero agradecer a minha esposa Márcia Nunes dos Santos, por
aguardar com muita ansiedade a tão esperada graduação de seu marido.
Também quero agradecer ao meu orientador Júlio César S. dos Anjos, pelo auxílio e paciência
perante minhas dificuldades neste período de muita determinação.
Ao meu colega Tailor Tonon, que não mediu esforços na busca da graduação.
6 REFERÊNCIAS BIBLIOGRÁFICAS
AGUIAR, César de Souza. Modelo de virtualização distribuída aplicado ao gerenciamento e replicação
de clusters multiuso. São Paulo: UNESP, 2008. Tese (Mestrado em Computação). Universidade Estadual
Paulista Julio de Mesquita Filho, 2008.
COSTA, Felipe. Ambiente de Rede Monitorado com Nagios e Cacti. Rio de Janeiro: Editora Ciência
Moderna Ltda. 2008. 196p.
COULOURIS, George; DOLLIMORE, Jean; KINDBERG, Tim. Sistemas Distribuídos: Conceitos e
Projeto. 4.ed. Porto Alegre: Bookman. 2007. 792p.
DODONOV, Evgueni. Um Mecanismo Integrado de Cache e Prefetching para Sistemas de Entrada e
Saída de Alto Desempenho. São Carlos: UFSCAR, 2004. Tese (Mestrado em Computação). Universidade
Federal de São Carlos, 2004.
GUARDIA, H. C.; SATO, Liria Matsumoto. NPFS: Um Sistema de Arquivos Paralelos em Rede. In:
XVII Simpósio Brasileiro de Redes de Computadores, 1999, Salvador. Anais do XVII Simpósio Brasileiro
de Redes de Computadores, 1999. p.567-568.
HERMANN, Everton. Dinamismo de Servidores de Dados no Sistema de Arquivos dNFSp. Porto
Alegre: UFRGS, 2006. Tese (Mestrado em Computação). Universidade Federal do Rio Grande do Sul, 2006.
KASSICK, Rodrigo Virote. Reconfiguração Automática de I/O para Aplicações Paralelas no Sistema de
Arquivos dNFSp2. Porto Alegre: UFRGS, 2010. Tese (Mestrado em Computação). Universidade Federal do
Rio Grande do Sul, 2010.
KLING-PETERSEN, Torben. Lustre File System: Demo Quick Start Guide. Sun Microsystems.
Disponível em: <https://www.sun.com/offers/details/820-7390.xml/>. Acesso em: 01 jun. 2010.
MACHADO, Francis Berenger; MAIA, xLuiz Paulo. Arquitetura de Sistemas Operacionais. 4.ed. Rio de
Janeiro: LTC. 2007. 308p.
MARIMOTO, Carlos E. Servidores Linux: Guia Prático. Porto Alegre: Sul Editores. 2008. 735p.
OLIVEIRA, Rômulo Silva de; CARISSIMI, Alexandre da Silva; TOSCANI, Simão Sirineo. Sistemas
Operacionais. 4.ed. Porto Alegre: Bookman. 2010. 374p.
PITANGA, Marcos. Construindo Supercomputadores com Linux. 3.ed. Rio de Janeiro: Brasport. 2008.
374p.
SANTOS, Rogério Santanna. Guia de Estruturação e Administração do Ambiente de Cluster e Grid.
Ministério do Planejamento, Orçamento e Gestão. Governo Federal, Brasília. 2006, 454p.
SAWAYA, Márcia Regina. Dicionário de Informática e Internet, Inglês/Português. São Paulo: Livraria
Nobel,1999, 543p.
SCHEPKE, C. et al. Panorama de Ferramentas para Gerenciamento de Clusters. Porto Alegre: Instituto
de Informática, UFRGS, 2005. Universidade Federal do Rio Grande do Sul, 2005.
TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 2.ed. São Paulo: Prentice Hall. 2003. 695p.
TANENBAUM, Andrew S.; STEEN, Maarten V. Sistemas Distribuídos - Princípios e Paradigmas. 2.ed.
São Paulo: Pearson Prentice Hall. 2007. 404p.
TAURION, Cezar. Cloud Computing - Computação em Nuvem - Transformando o Mundo da
Tecnologia da Informação. Rio de Janeiro: Brasport. 2009. 206p.
VERAS, Manoel. Datacenter - Componente Central da Infraestrutura de TI. Rio de Janeiro: Brasport.
2009. 347p.
WHITE, Tom. Hadoop - The Definitive Guide. Sebastopol, California: O'Reilly Media. 2009. 504p.

Documentos relacionados

Apache Hadoop - DComp - Universidade Federal de São Carlos

Apache Hadoop - DComp - Universidade Federal de São Carlos sucesso é o crescimento exponencial da quantidades de dados gerados e que precisam ser armazenados e processados. Grandes sistemas, como Google, Facebook, Twiter entre outros, possuem bases de dado...

Leia mais