Hadoop » History » Version 9
Version 8 (Carlos Moreira, 08 May 2012 16:13) → Version 9/23 (Carlos Moreira, 22 May 2012 15:48)
h1. Hadoop
h2. Objetivo
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.
h2. Projeto Educloud
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.
h2. Hadoop
O Hadoop é uma solução de sistema de arquivos distribuídos desenvolvida para manipular com foco em grandes 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. hadoop.
Ele é desenvolvido em Java, oferecendo 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.
* dCache - É uma solução de filesystem paralelo para grandes volumes de dados, onde o acesso aos dados é feito através de diversos métodos de acesso;
* Glusterfs - Diferentemente do hadoop, apresenta vários servidores de dados, que são aglutinados no momento em que o cliente realiza a montagem do diretório;
* Lustre - É uma solução onde o servidor de metadados é centralizado e os servidores de dados são distribuídos para aumentar a velocidade de leitura e gravaçã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:
* Amazon - Intuito de auxiliar no processo de buscas;
* Adobe - Usos diversos dentra companhia;
* AOL - Uso para análises estatísticas;
* eBay - Uso para pesquisa e otimização de buscas;
* Facebook - Uso para análise de logs e aprendizado de máquina;
* FOX - Uso para analises, mineração de dados e aprendizado de máquina;
* Google e IBM - Parceria para estudos sobre desafios em escalabilidade de aplicações em internet;
* LinkedIn - Uso nos algoritmos de buscas de contatos;
* Twitter - Uso para armazenamento de tweets, logs e outros tipos de dados gerados pela companhia;
* Yahoo - Suporte na pesquisa do sistema de propaganda do Yahoo, e em testes de escalabilidade.
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:
* Amazon Web Service - Inserido dentro da infraestrutura EC2 como parte do serviço Amazon Elastic MapReduce;
* Cloudera - Oferece uma plataforma composta por produtos open source (no qual o Hadoop está inserido) para seus clientes;
* IBM - Distribui uma versão derivada do Hadoop para rodar nas JVMs da IBM.
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.
h2. Uso do Hadoop no Projeto Educloud
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/HadoopIsNot
Este link indica uma lista de necessidades para as quais o Hadoop não foi feito; dentre elas:
* Ele não foi feito para substituir um bando de dados;
* O mapreduce nem sempre é o melhor algoritmo de análise;
* O Hadoop não é indicado para pessoas leigas em conhecimento de java, erros de rede, aprender administração de sistemas;
* Ele não é o substituto para filesystems de SAN em alta disponibilidade;
* E o HDFS não está de acordo com o padrão POSIX.
http://www.quantivo.com/blog/top-5-reasons-not-use-hadoop-analytics
Neste link, podemos observar alguns pontos indicados para não usar Hadoop para análises:
* Hadoop é um framework, não é uma solução pronta;
* As ferramentas Hive e Pig não solucionam problemas da arquitetura do Hadoop;
* A instalação é simples, porém manutenção e desenvolvimento é custoso;
* O forte da análise do Hadoop é em sumarização, porém é fraco em análises pontuais;
* O Hadoop será eficaz em suas análises, se os algoritmos de MapReduce também o forem.
http://tech.backtype.com/the-dark-side-of-hadoop
Por fim, este link critica alguns pontos a respeito do Hadoop:
* Má documentação para variáveis de configuração, consideradas críticas;
* Gerenciamento de memória muito ruim;
* Geração de processo zumbis.
Alé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:
* 2 máquinas com a função de master;
* No mínimo, 4 máquinas com a função de slaves, sendo que estas máquinas deverão possuir storage com tamanho considerável, pois serão nelas que os dados serão armazenados.
* Para efeito de análise do algoritmo de localizing, é interessante que essas 6 máquinas sejam ligadas em 2 switches distintos; para que possamos analisar a eficácia do localizing e do algoritmo de replicação.
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:
* Java 1.6 ou posterior;
* ssh;
* rsync
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:
* criar um diretório;
* copiar os arquivos xml dentro da pasta conf para o diretório criado;
* Executar o seguinte comando:
>* 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:
* NameNode - 1 máquina - Master
* JobTracker - 1 máquina - Master
* DataNode & TaskTracker - Demais máquinas - Slaves
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:
* no primeiro estágio é feito o mapeamento dos dados através de uma estrutura de par, chave e valor;
* no segundo estágio é feito a redução dessa estrutura, agregando pares que tenham a mesma chave.
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.
h2. Objetivo
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.
h2. Projeto Educloud
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.
h2. Hadoop
O Hadoop é uma solução de sistema de arquivos distribuídos desenvolvida para manipular com foco em grandes 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. hadoop.
Ele é desenvolvido em Java, oferecendo 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.
* dCache - É uma solução de filesystem paralelo para grandes volumes de dados, onde o acesso aos dados é feito através de diversos métodos de acesso;
* Glusterfs - Diferentemente do hadoop, apresenta vários servidores de dados, que são aglutinados no momento em que o cliente realiza a montagem do diretório;
* Lustre - É uma solução onde o servidor de metadados é centralizado e os servidores de dados são distribuídos para aumentar a velocidade de leitura e gravaçã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:
* Amazon - Intuito de auxiliar no processo de buscas;
* Adobe - Usos diversos dentra companhia;
* AOL - Uso para análises estatísticas;
* eBay - Uso para pesquisa e otimização de buscas;
* Facebook - Uso para análise de logs e aprendizado de máquina;
* FOX - Uso para analises, mineração de dados e aprendizado de máquina;
* Google e IBM - Parceria para estudos sobre desafios em escalabilidade de aplicações em internet;
* LinkedIn - Uso nos algoritmos de buscas de contatos;
* Twitter - Uso para armazenamento de tweets, logs e outros tipos de dados gerados pela companhia;
* Yahoo - Suporte na pesquisa do sistema de propaganda do Yahoo, e em testes de escalabilidade.
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:
* Amazon Web Service - Inserido dentro da infraestrutura EC2 como parte do serviço Amazon Elastic MapReduce;
* Cloudera - Oferece uma plataforma composta por produtos open source (no qual o Hadoop está inserido) para seus clientes;
* IBM - Distribui uma versão derivada do Hadoop para rodar nas JVMs da IBM.
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.
h2. Uso do Hadoop no Projeto Educloud
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/HadoopIsNot
Este link indica uma lista de necessidades para as quais o Hadoop não foi feito; dentre elas:
* Ele não foi feito para substituir um bando de dados;
* O mapreduce nem sempre é o melhor algoritmo de análise;
* O Hadoop não é indicado para pessoas leigas em conhecimento de java, erros de rede, aprender administração de sistemas;
* Ele não é o substituto para filesystems de SAN em alta disponibilidade;
* E o HDFS não está de acordo com o padrão POSIX.
http://www.quantivo.com/blog/top-5-reasons-not-use-hadoop-analytics
Neste link, podemos observar alguns pontos indicados para não usar Hadoop para análises:
* Hadoop é um framework, não é uma solução pronta;
* As ferramentas Hive e Pig não solucionam problemas da arquitetura do Hadoop;
* A instalação é simples, porém manutenção e desenvolvimento é custoso;
* O forte da análise do Hadoop é em sumarização, porém é fraco em análises pontuais;
* O Hadoop será eficaz em suas análises, se os algoritmos de MapReduce também o forem.
http://tech.backtype.com/the-dark-side-of-hadoop
Por fim, este link critica alguns pontos a respeito do Hadoop:
* Má documentação para variáveis de configuração, consideradas críticas;
* Gerenciamento de memória muito ruim;
* Geração de processo zumbis.
Alé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:
* 2 máquinas com a função de master;
* No mínimo, 4 máquinas com a função de slaves, sendo que estas máquinas deverão possuir storage com tamanho considerável, pois serão nelas que os dados serão armazenados.
* Para efeito de análise do algoritmo de localizing, é interessante que essas 6 máquinas sejam ligadas em 2 switches distintos; para que possamos analisar a eficácia do localizing e do algoritmo de replicação.
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:
* Java 1.6 ou posterior;
* ssh;
* rsync
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:
* criar um diretório;
* copiar os arquivos xml dentro da pasta conf para o diretório criado;
* Executar o seguinte comando:
>* 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:
* NameNode - 1 máquina - Master
* JobTracker - 1 máquina - Master
* DataNode & TaskTracker - Demais máquinas - Slaves
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:
* no primeiro estágio é feito o mapeamento dos dados através de uma estrutura de par, chave e valor;
* no segundo estágio é feito a redução dessa estrutura, agregando pares que tenham a mesma chave.
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.