O escopo deste documento trata de avaliar um conjunto de soluções de storage aplicado à cloud computing, avaliando a viabilidade de uma delas atender às necessidades do projeto EduCloud, para posterior deployment. Fez parte da investigação descrita por este documento, a verificação dos passos para execução da instalação e configuração da solução de storage.
O projeto Educloud é um projeto para a implementação de uma infraestrutura de cloud computing para a secretaria da educação do estado de São Paulo, com objetivo de fornecer serviços de apoio ao ensino via nuvem, para educadores e estudantes.
O Hadoop é uma solução de sistema de arquivos distribuídos desenvolvida para manipular volumes de dados, focando na análise qualitativa dos dados armazenados através de ferramentas de data mining desenvolvidas utilizando o framework fornecido pelo Google, seu fabricante.
Desenvolvido na linguagem Java, o Hadoop oferece um sistema de arquivos paralelo e distribuído com tolerância à falha, e um framework para desenvolver aplicações de análise dos dados armazenados de forma a correlacioná-los.
Algumas opções ao hadoop são apresentadas a seguir, porém nem todos tem a funcionalidade de trabalhar com grandes volumes de dados, ou até mesmo de fazer a correlação de dados.
Todas as soluções acima foram retiradas do seguinte site:
http://en.wikipedia.org/wiki/List_of_file_systems#Distributed_parallel_fault-tolerant_file_systems
O Hadoop é licenciado sob a Apache v2.0. Nesta versão de licenciamento é possível o uso para qualquer propósito, alterar e redistribuir o código sob outro tipo de licenciamento, desde que seja incluído um changelog indicando as modificações realizadas. O texto da licença se encontra em: http://www.apache.org/licenses/LICENSE-2.0
O Hadoop tem seu uso bem vasto entre várias empresas. Existem empresas que o utilizam como parte de sua infraestrutura, onde a função do hadoop é dar suporte ao produto ou serviço oferecido pela empresa, enquanto em outras o próprio Hadoop é o serviço oferecido pela empresa.
Dentre as empresas que usam Hadoop em sua infraestrutura, temos as seguintes:
Outras empresas que usam hadoop em sua infraestrutura pode ser listada em: http://wiki.apache.org/hadoop/PoweredBy
A seguir algumas empresas que oferecem o Hadoop como serviço:
Outras empresas que oferecem hadoop como um serviço/produto podem ser encontradas no seguinte link: http://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support
Analisando os dados fornecidos acima, podemos observar que grandes empresas utilizam o hadoop em sua infraestrutura ou como parte de seus serviços/produtos; portanto podemos afirmar que o Hadoop tem uma vasta utilização e existe interesse das empresas na continuidade desse projeto.
Observando também o link https://issues.apache.org/jira/browse/HADOOP#selectedTab=com.atlassian.jira.plugin.system.project:roadmap-panel&allVersions=true , podemos observar a existência de um roadmap para futuras versões do hadoop. O release atual é o 1.0, e existem trabalhos nas versões 1.1, 2.0 e 3.0. Além disso, é incluído no roadmap melhorias nas versões já lançadas, como as versões 0.21.1, 0.22.1, 0.23.2, 0.23.3 e 0.24.0. Há também planos de criação de uma versão windows do hadoop.
Com essas informações é possível afirmar que o Hadoop, como projeto, não tem uma baixa expectativa de vida, garantindo sua adoção sem preocupações futuras de substituição de tecnologia por obsolescência.
Basicamente, o requisito para filesystem do projeto EduCloud é de ter um filesystem paralelo. Este filesystem paralelo irá atender ao projeto na forma de distribuição de conteúdo para os usuários, e na correlação de dados para detectar semelhanças entre estudos de usuários distintos (extensão de funcionalidade, não necessariamente um requisito do filesystem).
Nesse sentido, o Hadoop pode atender ao projeto pois ele atende ao requisito básico de ser um filesystem paralelo para distribuição de arquivos.Porém, dado que não está claro que o projeto EduCloud irá trabalhar com grandes volumes de dados, é provável que o hadoop não seja a solução mais indicada para o projeto, pois todo o trabalho existente no hadoop envolve a movimentação e disponibilidade de grandes volumes de dados. Segundo artigos, o Hadoop não possui performance ótima mexendo com pequenos volumes de dados. Os links a seguir irão aproveitar e mostrar quais situações nas quais o Hadoop possui desvantagem:
http://wiki.apache.org/hadoop/HadoopIsNotAlém dos itens já citados acima, a desvantagem do hadoop é ser um filesystem baseado em write-once, ou seja, não existe append de arquivo, não sendo possível modificações de arquivos. Outra desvantagem é o map reduce, pois se trata de uma linguagem para criar jobs de análise de dados. É necessário um conhecimento prévio do que se deseja analisar, pois o hadoop apenas fornece as ferramentas para análise, não as faz de forma automática. Portanto deve se levar em consideração o tempo de desenvolvimento dos jobs de map reduce ao realizar uma implementação de hadoop.
Em contrapartida, as vantagens da tecnologia são disponibilizar o dado com redudância, tentar manter o dado próximo ao local onde ele será usado para evitar uso de rede (sobrecarga nos switches centrais) e realizar o correlacionamento de dados semelhantes.
Pensando nas soluções que compõem o projeto EduCloud, podemos observar ao comparar o Hadoop com outras soluções de storages disponibilizadas pelas soluções de cloud, que a principio, o hadoop oferece um serviço semelhante ao swift. O swift é a solução de data store que compõem o framework fornecido pelo OpenStack, e com o propósito de armazenar os dados que serão utilizados pelas máquinas virtuais. Logo, seu propósito de disponibilizar o dado para a máquina virtual, vem de encontro com a solução proposta pelo hadoop.
Considerando que o Projeto EduCloud tenha um deployment de Hadoop em sua composição, os requisitos de hardware são, no mínimo:
A documentação descrita no link http://hadoop.apache.org/common/docs/stable é indicada para fazer um deployment de uma versão single node, e outra versão, mais elaborada, de cluster setup. Com esta documentação, parece ser suficiente para realizar o deployment de hadoop em um ambiente para testes.
Além disso, consultando a wiki do projeto Hadoop (http://wiki.apache.org/hadoop/#Setting_up_a_Hadoop_Cluster), existem outros tutoriais de deployment, específicos para determinadas distribuições de linux, e determinados sistemas operacionais.
E os passos necessários para deployment são:
Os pré-requisitos para instalação são os seguintes:
Para um modo de operação single node:
Satisfeitos os requisitos acima, é necessário fazer o download e descompactar o conteúdo.
Dentro do diretório descompactado, alterar o arquivo: conf/hadoop-env.sh para setar a variável de ambiente JAVA_HOME de acordo com o java instalado na máquina.
Após isso, basta seguir os seguintes passos:
- bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
Para um modo de operação cluster, além dos passos acima, é necessário executar os seguintes passos:
Definir o seguinte grupo de máquinas:
Todas devem conter o mesmo HADOOP_HOME (path para instalação do hadoop nas máquinas)
A configuração de cada grupo de máquinas deve ser feito de acordo com o seguinte link: http://hadoop.apache.org/common/docs/stable/cluster_setup.html
Configuração de mapreduce e localizing
O map reduce do hadoop é na realidade um framework para programação de algoritmos de análise de grandes quantidades de dados. Uma analogia do map reduce para o mundo dos bancos de dados é que o map reduce se refere à query de busca do banco de dados.
A estrutura do map reduce funciona da seguinte forma:
Logo, o map reduce atua sobre a análise dos dados, não sobre o dado em si; de forma que o resultado da análise é mais compacto.
Quanto ao localizing, é inerente à arquitetura do hadoop em distribuir os dados de acordo com o fator de replicação estipulado para os dados, e para aproximar o dado dos nós que irão processá-lo.