O documento apresenta os passos iniciais para configurar e executar um job MapReduce em um cluster de nó único no Hadoop. Inclui configurar SSH, variáveis de ambiente, arquivos de configuração do Hadoop e executar um exemplo de contagem de palavras para analisar o resultado.
2. Fillipe Massuda
Consultor SOA na Sensedia
Engenheiro da computação
pela FEI com MBA em
Arquitetura de TI pela FIAP
Especialista em
implementação de
arquitetura de referência SOA
nas plataformas IBM e Oracle
Apaixonado por TI e novas
tecnologias
Guitarrista amador
aposentado e viciado em
videogamefillipe.massuda@sensedia.com
@fimassuda
3. Sobre a Sensedia
Empresa brasileira, sediada em Campinas com escritórios
em São Paulo, Rio de Janeiro e EUA
Profundo conhecimento em:
SOA (Arquitetura Orientada a Serviços)
API (Application Programming Interfaces)
Posicionada como visionária no quadrante mágico em
SOA do Gartner
6. Para esta demonstração, o ambiente foi o seguinte:
• Ubuntu 13.04
• JDK 1.6
• Apache Hadoop 1.1.2 (Stable)
Foram utilizadas as seguintes ferramentas de apoio:
• Apache Maven 3.0.5
Ambiente
7. O Hadoop possui 3 modos de operação:
Local (Standalone)
Pseudo-Distributed
Fully-Distributed
Modos de Operação
Neste apresentação será demonstrada a configuração e execução de um job no
modo Pseudo-Distributed, também chamado Single-Node Cluster, no qual
cada Hadoop daemon é rodado em um processo java separado.
9. A configuração do SSH é necessária para o Hadoop gerenciar seus nós.
Por rodar tudo em localhost, podemos configurar sem senha de conexão.
Executar os seguintes comandos para criação da chave para conexão
ssh ao localhost
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_Keys
Testar a conexão ssh para adicionar a máquina na lista de
known_hosts
$ ssh localhost
Passo 1: Configuração do SSH
10. Configurar o arquivo de perfil para adicionar as variáveis de ambiente ao
Path. Além disso, adicionar a pasta do Hadoop as variáveis
(HADOOP_PREFIX) e verificar se JAVA_HOME também está configurada.
Configuração do .bashrc (Ubuntu)
Passo 2: Configurando ~/.bashrc
Lembrando que ao atualizar
o .bashrc, o perfil deve ser
carregado novamente,
reiniciando o terminal ou
executando
source ~/.bashrc
Nota: Em algumas versões a variável com a pasta do Hadoop
pode ser configurada como HADOOP_HOME. Para esta versão,
quando utilizado HADOOP_HOME, o aviso “$HADOOP_HOME is
deprecated” era gerado, para evitar este aviso é necessário
utilizar a variável HADOOP_PREFIX.
11. Configurar o JAVA_HOME no arquivo $HADOOP_PREFIX/conf/hadoop-
env.sh
Criar uma pasta para que o Hadoop utilize como base para os
arquivos temporários
ex: $HADOOP_PREFIX/tmp
Passo 3: Configuração do Hadoop
12. No arquivo core-site.xml configurar o nome padrão para o File System e a
pasta base para os arquivos temporários:
$HADOOP_PREFIX/conf/core-site.xml
Passo 4: Arquivos de configuração(1/3)
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/fillipe/dev/hadoop/tmp</value>
</property>
</configuration>
Nota: Para mais informações sobre as propriedades
do arquivo core-site.xml, consultar o arquivo
docs/core-default.html
13. Alterar no arquivo de configuração do HDFS, para adicionar o número do
replicações:
$HADOOP_PREFIX/conf/hdfs-site.xml
Passo 4: Arquivos de configuração(2/3)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Nota: Para mais informações de configuração no
arquivo hdfs-site.xml, consultar o arquivo docs/hdfs-
default.html
14. Alterar no arquivo de configurações do MapReduce o host e a porta de
execução do job tracker:
$HADOOP_PREFIX/conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
Passo 4: Arquivos de configuração(3/3)
Nota: Para mais informações de configuração no
arquivo mapred-site.xml, consultar o arquivo
docs/mapred-default.html
15. Formatar o hadoop filesystem para inicializar as pastas para o HDFS e o
MapReduce:
$ hadoop namenode -format
Passo 5: Formatando o HDFS FileSystem
16. Inicializar os processos:
start-all.sh
Finalizar os processos:
stop-all.sh
Passo 6: Inicialização dos Processos
Nota: Estes comandos irão inicializar ou finalizar os
DataNodes, NameNodes, JobTrackers e TaskTrackers.
18. O job MapReduce que será utilizado, terá o objetivo de contar a
quantidade de vezes que cada palavras aparece no documento de
entrada, gerando um resumo na pasta de saída.
Os arquivos para o teste serão:
Exemplo: Contador de Palavras
file1.txt
Hadoop
MapReduce
BigData
Apache
file2.txt
Hadoop
HDFS
Namenode and Datanode
MapReduce
JobTracker and TaskTracker
Nota: Este exemplo está disponível no pacote do hadoop.
19. A primeira etapa é desenvolver o Map que irá receber os arquivos de
entrada, um por um, e retornará uma lista <chave, valor>.
Map
Nota: Neste exemplo, a
função map, retornará
para o file1.txt como
input, algo semelhante à:
file1.txt
• Hadoop, 1
• MapReduce, 1
• BigData, 1
• Apache, 1
20. A etapa de shuffle será realizado pelas próprias bibliotecas de
MapReduce. A saída do map é a entrada do Shuffle e a saída do
Shuffle é a entrada do Reduce.
Nesta etapa, a lista é agrupada e ordenada por chave.
Shuffle
Saída do Map
file1.txt
• Hadoop, 1
• MapReduce, 1
• BigData, 1
• Apache, 1
file2.txt
• Hadoop, 1
• HDFS, 1
• Namenode, 1
• and, 1
• Datanode, 1
• MapReduce, 1
• JogTracker, 1
• and, 1
• TaskTracker, 1
Saída do Shuffle
• Apache, [1]
• BigData, [1]
• Datanode, [1]
• HDFS, [1]
• Hadoop, [1,1]
• JobTracker, [1]
• MapReduce, [1,1]
• Namenode, [1]
• TaskTracker, [1]
• and, [1,1]
22. Por fim, devemos configurar a execução do job, informando ao
Hadoop como tratar o input e output, as classes de tratamento do
map e reduce, os tipos de variáveis e etc.
Driver
23. Inicialmente devemos copiar os arquivos para o HDFS.
Criar uma pasta dentro do HDFS para receber os arquivos:
hadoop fs –mkdir /user/input
Copiar os arquivos
hadoop fs –put file* /user/input
Copiando os arquivos para o HDFS
Nota: Para uma lista com os possíveis comandos para
serem executados no FS, executar hadoop fs -help
24. Neste exemplo eu estou usando o maven para o gerenciamento de
dependências e empacotamento do JAR.
Configuração de dependências no pom.xml
Basta rodar mvn package para gerar o arquivo JAR.
Empacotando o JAR
Nota: Para mais informações sobre Apache Maven
http://maven.apache.org
25. Para executar o job, basta rodar o seguinte comando:
hadoop jar <Nome do Arquivo Jar> <Classe Main> <arg...>
Executando o Job
Comando de exemplo:
hadoop jar HadoopPrimeirosPassos-1.0-
SNAPSHOT.jar WordCount /user/input /user/output
26. Para verificar o resultado gerado pelo job, basta acessar o arquivo, na
pasta de saída:
hadoop fs –cat /user/output/part-*
Copiar o arquivo de resultado para o diretório local:
hadoop fs –copyToLocal /user/output/part-* output.txt
Analisando o Resultado
27. O hadoop possui algumas
interfaces web por padrão,
como o NameNode Web UI,
no qual é possível, através
do browser, consultar
informações referentes a
saúde do cluster HDFS.
http://localhost:50070
NameNode Web UI
28. JobTracker Web UI
Assim como no
NameNode, podemos
ter informações sobre
o job a partir de uma
interface web, como
quais jobs estão
rodando, quantos
estão rodando, etc,
através do JobTracker
Web UI.
http://localhost:50030
29. TaskTracker Web UI
Por fim, podemos ter
informações sobre
quais tasks estão
rodando ou não, além
de podermos consultar
os logs, através do
TaskTracker Web UI.
http://localhost:50060
30. Hadoop Single Node Setup
http://hadoop.apache.org/docs/r1.1.2/single_node_setup.html
Introdução ao Hadoop
http://www.aqueleblogdesoa.com.br/2013/05/introducao-ao-hadoop/
Código fonte disponível em:
https://github.com/fimassuda/HadoopPrimeirosPassos
Referências