Pesquisa de site

Instale o cluster Hadoop Multinode usando CDH4 no RHEL/CentOS 6.5


Hadoop é uma estrutura de programação de código aberto desenvolvida pelo Apache para processar big data. Ele usa HDFS (Hadoop Distributed File System) para armazenar os dados em todos os datanodes no cluster de maneira distributiva e modelo mapreduce para processar os dados.

Namenode (NN) é um daemon mestre que controla HDFS e Jobtracker (JT ) é o daemon mestre para o mecanismo mapreduce.

Requisitos

Neste tutorial, estou usando duas VMs CentOS 6.3master’ e ‘node’, a saber. (master e node são meus nomes de host). O IP ‘mestre’ é 172.21.17.175 e o IP do nó é ‘172.21.17.188‘. As instruções a seguir também funcionam nas versões RHEL/CentOS 6.x.

No Mestre
[root@master ~]# hostname

master
[root@master ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.175  Bcast:172.21.19.255  Mask:255.255.252.0
No nó
[root@node ~]# hostname

node
[root@node ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.188  Bcast:172.21.19.255  Mask:255.255.252.0

Primeiro, certifique-se de que todos os hosts do cluster estejam no arquivo '/etc/hosts' (em cada nó), se você não tiver o DNS configurado.

No Mestre
[root@master ~]# cat /etc/hosts

172.21.17.175 master
172.21.17.188 node
No nó
[root@node ~]# cat /etc/hosts

172.21.17.197 qabox
172.21.17.176 ansible-ground

Instalando o cluster Hadoop Multinode no CentOS

Usamos o repositório oficial CDH para instalar o CDH4 em todos os hosts (mestre e nó) em um cluster.

Etapa 1: Baixe e instale o repositório CDH

Vá para a página oficial de download do CDH e pegue a versão CDH4 (ou seja, 4.6) ou você pode usar o seguinte comando wget para baixar o repositório e instalá-lo.

No RHEL/CentOS de 32 bits
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
No RHEL/CentOS de 64 bits
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm

Antes de instalar o Hadoop Multinode Cluster, adicione a chave GPG pública Cloudera ao seu repositório executando um dos seguintes comandos de acordo com a arquitetura do seu sistema.

## on 32-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

Etapa 2: configurar JobTracker e NameNode

Em seguida, execute o seguinte comando para instalar e configurar JobTracker e NameNode no servidor Master.

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode

Etapa 3: configurar o nó de nome secundário

Novamente, execute os seguintes comandos no servidor mestre para configurar o nó de nome secundário.

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-hdfs-secondarynam

Etapa 4: configurar o Tasktracker e o Datanode

Em seguida, configure o tasktracker e o datanode em todos os hosts do cluster (Node), exceto os hosts JobTracker, NameNode e NameNode secundário (ou em espera) (no nó, neste caso).

[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode

Etapa 5: configurar o cliente Hadoop

Você pode instalar o cliente Hadoop em uma máquina separada (neste caso eu instalei no datanode, você pode instalá-lo em qualquer máquina).

[root@node ~]# yum install hadoop-client

Etapa 6: implantar HDFS em nós

Agora, se concluímos as etapas acima, vamos avançar para a implantação de hdfs (para ser feito em todos os nós).

Copie a configuração padrão para o diretório /etc/hadoop (em cada nó do cluster).

[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster

Use o comando alternatives para definir seu diretório personalizado, como segue (em cada nó do cluster).

[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

Etapa 7: Personalizando Arquivos de Configuração

Agora abra o arquivo ‘core-site.xml’ e atualize “fs.defaultFS” em cada nó do cluster.

[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>

Próxima atualização “dfs.permissions.superusergroup” em hdfs-site.xml em cada nó do cluster.

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>

Nota: Por favor, certifique-se de que a configuração acima esteja presente em todos os nós (faça em um nó e execute scp para copiar em repouso dos nós).

Etapa 8: configurando diretórios de armazenamento local

Atualize “dfs.name.dir ou dfs.namenode.name.dir” em ‘hdfs-site.xml’ no NameNode (no Master e Node). Altere o valor conforme destacado.

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.datanode.data.dir</name>
 <value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>

Etapa 9: criar diretórios e gerenciar permissões

Execute os comandos abaixo para criar estrutura de diretórios e gerenciar permissões de usuário nas máquinas Namenode (Master) e Datanode (Node).

[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]#  mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]#  chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn

Formate o Namenode (no Master), emitindo o seguinte comando.

[root@master conf]# sudo -u hdfs hdfs namenode -format

Etapa 10: configurando o NameNode secundário

Adicione a seguinte propriedade ao arquivo hdfs-site.xml e substitua o valor conforme mostrado no Master.

<property>
  <name>dfs.namenode.http-address</name>
  <value>172.21.17.175:50070</value>
  <description>
    The address and port on which the NameNode UI will listen.
  </description>
</property>

Nota: No nosso caso, o valor deve ser o endereço IP da VM mestre.

Agora vamos implantar o MRv1 (versão 1 do Map-reduce). Abra o arquivo ‘mapred-site.xml’ seguindo os valores conforme mostrado.

[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
 <name>mapred.job.tracker</name>
 <value>master:8021</value>
</property>
</configuration>

Em seguida, copie o arquivo ‘mapred-site.xml’ para a máquina do nó usando o seguinte comando scp.

[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml                                                                      100%  200     0.2KB/s   00:00

Agora configure os diretórios de armazenamento local para serem usados pelos Daemons MRv1. Abra novamente o arquivo ‘mapred-site.xml’ e faça as alterações conforme mostrado abaixo para cada TaskTracker.

<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>

Depois de especificar esses diretórios no arquivo ‘mapred-site.xml’, você deve criar os diretórios e atribuir as permissões de arquivo corretas a eles em cada nó do cluster.

mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local

Etapa 10: Inicie o HDFS

Agora execute o seguinte comando para iniciar o HDFS em cada nó do cluster.

[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

Etapa 11: Crie diretórios HDFS /tmp e MapReduce /var

É necessário criar /tmp com as permissões adequadas exatamente como mencionado abaixo.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

Agora verifique a estrutura do arquivo HDFS.

[root@node conf]# sudo -u hdfs hadoop fs -ls -R /

drwxrwxrwt   - hdfs hadoop          	0 2014-05-29 09:58 /tmp
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var
drwxr-xr-x  	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib
drwxr-xr-x   	- hdfs hadoop         	0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt   - mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging

Depois de iniciar o HDFS e criar '/tmp', mas antes de iniciar o JobTracker, crie o diretório HDFS especificado pelo parâmetro 'mapred.system.dir' (por padrão $ {hadoop.tmp .dir}/mapred/system e altere o proprietário para mapred.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system

Etapa 12: inicie o MapReduce

Para iniciar o MapReduce: inicie os serviços TT e JT.

Em cada sistema TaskTracker
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start

Starting Tasktracker:                               [  OK  ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
No sistema JobTracker
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start

Starting Jobtracker:                                [  OK  ]

starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out

A seguir, crie um diretório inicial para cada usuário do hadoop. é recomendado que você faça isso no NameNode; por exemplo.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir  /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>

Nota: onde é o nome de usuário Linux de cada usuário.

Alternativamente, você pode criar o diretório inicial da seguinte maneira.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER

Etapa 13: Abra JT, NN UI no navegador

Abra seu navegador e digite o URL como http://ip_address_of_namenode:50070 para acessar o Namenode.

Abra outra aba no seu navegador e digite o URL como http://ip_address_of_jobtracker:50030 para acessar o JobTracker.

Este procedimento foi testado com sucesso em RHEL/CentOS 5.X/6.X. Comente abaixo se você tiver algum problema com a instalação, irei ajudá-lo com as soluções.