Apache Hadoop para CentOS 8 - Nova versão

Admin -  Junho 20, 2020

Cover Image
Costruindo um mini File System distribuído

Apache Hadoop no CentOS 6-7-8 - Costruindo um Mini File System distribuído

O Hadoop é um projeto Apache para computação distribuída, inspirado no MapReduce e GoogleFS, existem quatro módulos no Hadoop:

  • Hadoop Common - Contém as bibliotecas e arquivos comuns necessários para todos os módulos Hadoop.
  • Hadoop Distributed File System (HDFS) - Sistema de arquivos distribuído que armazena dados em máquinas dentro do cluster, sob demanda, permitindo uma largura de banda muito grande em todo o cluster.
  • Hadoop Yarn - Trata-se de uma plataforma de gerenciamento de recursos responsável pelo gerenciamento do cluster, assim como pelo agendamento dos recursos.
  • Hadoop MapReduce - Modelo de programação para processamento em larga escala.

    Pré-requisitos

Para a instalação do Hadoop em modo distribuído é necessário ter no mínimo três máquinas reais ou virtuais com essas carateristicas:

  • 2 GB de Memória Ram
  • 20 GB de HD
  • 2 placas de rede
  • ISO do S.O. CentOS 8 x86_64 minimal (ISO 1.6GB)
  • Acesso na Internet para baixar os pacotes necessários
  • Acesso root
  • Um usuário Hadoop
  • Virtualbox

Configuração das placas de rede

Agora iremos configurar as placas de rede para poder estabelecer as conexões com a internet e com os outros nós do cluster hadoop para tal acessamos o menu "Aplicativos -> Sistema -> Configurações" na janela se abrirá clicar no ícone "Rede" será exibida as placas que iremos configurar. Fazer as alterações seguintes com bastante atenção pois estas configurações serão usadas para acessar internet e os outros nós do cluster. Verificando o endereço MAC nas opções das placas do VirtualBox iremos atribuir os endenreços IPv4 da seguinte mandeira:

  • A placa que será amarrada ao MAC Addres da placa "Bridge" do VirtualBox terá o DHCP Automático ativado
  • A placa que será amarrada ao MAC Addressda placa "Rede interna" do VirtualBox terá o IPv4 192.168.100.2 com Netmask 255.255.255.0 e o Gateway 0.0.0.0;

Instalação do S.O. CentOS 8

Executar o Virtualbox e criar três VM's com a configuração de hardware que foi especificada nos pré-requisitos, daremos atenção especial nas placas de rede que iremos criar onde a primeira será "Bridge" e a segunda será "rede interna", logo em seguida instalar o S.O. CentOS8, quando for exibida a tela de instalação iremos criar o usuário "root" com uma senha simples e um usuário "hadoop" também com uma senha simples. Ao final da instalação, executar o boot dela na tela de login fazer o acesso com o usuário "hadoop".

Atribução do nome do hostname

Agora iremos inserir o nome do hostname da nossa VM, para fazer isso precisamos clicar no menu "Aplicativos -> Sistema -> Configurações" e na janela que se abrirá clicar no ícone "Detalhes" e no campo "Nome do dispositivo" iremos digitar o nome: "hadoop-master" e fecharemos a janela das configurações.

Desativação do SELINUX

Desativaremos o sitema SELINUX para a instalação do Hadoop, começamos clicando no menu "Aplicativos -> Favoritos -> Terminal" e uma vez aberto iremos digitar o comando:

sudo vi /etc/selinux/config

e quando solicitada a senha digitaremos a senha que foi criada para o usuário "root", o editor de texto será aberto com o arquivo de configuração do SELINUX, nele iremos alterar a linha:

SELINUX=enforcing

para:

SELINUX=disabled

finalizar salvando o arquivo clicando no botão "Salvar", feito isso precisaremos habilitar as mudanças no nosso CentOS 8 executando, sempre no terminal, o comando:

sudo setenforce 0

Desativação do Firewall

Desativaremos o serviço de Firewall para que não haja problemas de portas bloqueadas. Faremos isso digitando no nosso terminal os seguintes comandos:

sudo systemctl stop firewalld sudo systemctl disable firewalld

Instalação do OpenJava JDK V.1.8.0

Para usar o Hadoop é fundamental instalar o Java JDK e nós usaremos a versão que está disponivel na nossa versão do CentOS 8. Para començar precisamos sincronizar os repositórios do S.O, digitando os seguintes comandos no terminal:

sudo yum clean all && yum repolist

será solicitada a senha e usaremos aquela que foi escolhida para o usuário "root".

Atualizados os repositórios instalaremos o pacote Java JDK digitando:

sudo yum install java-1.8.0-openjdk

Clonagem da VM para a criação de outras duas VM'S que serão os nós

Iremos agora desligar a VM para o processo de clonagem e criar as duas VMs que serão configuradas para ser os nós que irão compor o mini cluster Hadoop esse processo é feito pelo VirtualBox clicando com o botão direto na VM que acabamos de usar. Após clonar renomear cada máquina com o sufixo "slave1" e "slave2", em seguida alterar as placas de rede de cada uma delas mantendo somente as placas de rede interna, por fim iniciar as três VM's clicando duas vezes sobre o nome delas e fazer login com o usuário "hadoop" em todas. Atualização da configuração da rede nas VM's slaves 1 e 2

Para fazer essas autalizaçoẽs devemos executar o comando:

sudo nmtui

que é uma interface textual que irá permitir a editação das configuraçoẽs das placas de redes e do hostname dos nós reispetando a seguinte configuração:

slave1:
    IPv4 192.168.100.3
    netmask 255.255.255.0 ou /24
    Hostname "hadoop-slave1"
slave2:
    IPv4 192.168.100.4
    netmask 255.255.255.0 ou /24
    Hostname "hadoop-slave2" 

Configuração do arquivo "hosts" de todas as VMs

OBS.: AS MUDANÇAS LISTADAS A SEGUIR DEVEM SER FEITAS NAS TRẼS VMs.

Acessar pelo terminal como "root" para ter permissão de edição no arquivo "hosts" onde inseriremos os IP de todos os nós:

sudo vi /etc/hosts

127.0.0.1   localhost  
::1         localhost6.localdomain6 localhost6  

192.168.100.2       hadoop-master  
192.168.100.3       hadoop-slave1  
192.168.100.4       hadoop-slave2  

Feito o procedimento acima agora testaremos a conexão utilizando o comando ping

ping hadoop-master ping hadoop-slave1 ping hadoop-slave2

Configuração das variáveis de ambiente para o Java JDK e o PATH do Hadoop

Alterar o arquivo "~/.bashrc" com o conteúdo abaixo nas três máquinas: [hadoop@hadoop-master ~]$ vi ~/.bashrc [hadoop@hadoop-slave1 ~]$ vi ~/.bashrc [hadoop@hadoop-slave2 ~]$ vi ~/.bashrc

No final do arquivo adicionar o seguinte conteúdo:

export HADOOP_HOME="/hadoop"
export HADOOP_INSTALL="/hadoop"
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
#export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop
export LD_LIBRARY_PATH=/hadoop/lib/native/:$LD_LIBRARY_PATH
export HIVE_HOME="/hadoop/hive"
export PATH=$PATH:$HIVE_HOME/bin
export JAVA_HOME="/usr/lib/jvm/jre-openjdk"
export PATH=$PATH:$JAVA_HOME/bin

Para ativar as mudanças é necessário executar os comandos abaixo nas três VM's

[hadoop@hadoop-master ~]$ . ~/.bashrc [hadoop@hadoop-slave1 ~]$ . ~/.bashrc [hadoop@hadoop-slave2 ~]$ . ~/.bashrc

Configurando SSH com autenticação de chave RSA

OBS.: AS MUDANÇAS LISTADAS A SEGUIR DEVEM SER FEITAS SOMENTE NA VM MASTER.

Criar as chaves públicas e privadas para o usuário "hadoop" utilizando os comandos: ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Agora será necessário duplicar a linha da chave pública que já está presente dentro do arquívo "authorized_keys" para fazer isso editaremos o arquivo digitando no terminal o seguinte comando:
vi ~/.ssh/authorized_keys

Com o arquivo aberto dentro do editor de texto selecionaremos todo o conteúdo e colaremos por duas vesez o mesmo conteúdo no final do arquivo, podemos também usar a combinação das teclas "SHIFT+YYP" para obter três linhas idênticas. Feito isso iremos mudar o nome dos hosts que está no final de cada linha da seguinte maneira: hadoop@hadoop-master hadoop@hadoop-slave1 hadoop@hadoop-slave2

Obs.: fazer com cuidado para alterar somente a ultíma parte da linha onde está o nome do host.

Continuaremos copiando as chaves públicas dentro de cada nó inclusive no "localhost" de cada VM que irão formar o cluster

Obs.: esses comandos serão digitados somente no host "hadoop-master"

scp -rp ~/.ssh/ hadoop@localhost:~/ scp -rp ~/.ssh/ hadoop@hadoop-master:~/ scp -rp ~/.ssh/ hadoop@hadoop-slave1:~/ scp -rp ~/.ssh/ hadoop@hadoop-slave2:~/

Alterar as permissões em todos os hosts do cluster
Obs.: Sempre do host "hadoop-master" digitaremos os comandos abaixo:

ssh hadoop@localhost "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" ssh hadoop@hadoop-master "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" ssh hadoop@hadoop-slave1 "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" ssh hadoop@hadoop-slave2 "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

Pronto. Agora testaremos os acessos via ssh com chaves compartilhadas em todas as máquinas.

Obs.: Digitar esses 4 comandos em todos os nós

ssh localhost (para sair digite exit ou ctrl+d) ssh hadoop-master (para sair digite exit ou ctrl+d) ssh hadoop-slave1 (para sair digite exit ou ctrl+d) ssh hadoop-slave2 (para sair digite exit ou ctrl+d)

Download do Apache Hadoop

Fazer o download do Apache Hadoop através do link abaixo: https://archive.apache.org/dist/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

ou podemos usar o comando abaixo para salvar dentro da pasta "/tmp"

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz -P /tmp/

Preparação do Hadoop

Acessando a máquina "hadoop-master" executar os seguintes comandos para descompactar o arquivo tar.gz do hadoop:

cd /tmp tar xzvf hadoop-3.2.1.tar.gz sudo su mv hadoop-3.2.1 /hadoop chown -R hadoop:hadoop /hadoop exit

Edite o arquivo "core-site.xml"

vi /hadoop/etc/hadoop/core-site.xml

inserindo entre as tags

<configuration>

</configuration>

as seguintes configurações;

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000/</value>
</property>
<property>
  <!-- <name>dfs.permissions</name> old version-->
        <name>dfs.permissions.enabled</name>
        <value>false</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/tmp</value>
</property>

Passaremos a editar o arquivo "hdfs-site.xml"

vi /hadoop/etc/hadoop/hdfs-site.xml

inserindo entre as tags

<configuration>

</configuration>

as seguintes configurações:

<property>
  <!--<name>dfs.secondary.http.address</name> old version-->
 <name>dfs.namenode.secondary.http-address</name>
        <value>master:50090</value>
        <description>Secondary NameNode hostname</description>
</property>
<property>
    <!--<name>dfs.data.dir</name> old version-->
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop/hdfs/datanode</value>
        <final>true</final>
</property>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop/hdfs/namenode</value>
        <final>true</final>
</property>
<property>
        <name>dfs.blocksize</name>
        <value>67108864</value>
</property>
<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>

Edite o arquivo "mapred-site.xml" da seguinte forma:

vi /hadoop/etc/hadoop/mapred-site.xml

inserindo entre as tags

<configuration>

</configuration>

as seguintes configurações:

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

Edite o arquivo "yarn-site.xml"

vi /hadoop/etc/hadoop/yarn-site.xml

inserindo entre as tags:

<configuration>

</configuration>

as seguintes configurações:

<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>256</value>
</property>
<property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
</property>
<property>
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>1</value>
</property>
<property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8025</value>
</property>
<property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
</property>
<property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8040</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
<property>
        <name>yarn.app.mapreduce.am.resource.mb</name>
        <value>512</value>
</property>
<property>
        <name>mapreduce.map.memory.mb</name>
        <value>256</value>
</property>
<property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>256</value>
</property>

Edite o arquivo "hadoop-env.sh" alterando as variáveis de ambientes conforme abaixo na parte final do arquivo.

Obs.: essas configurações já existem no arquivo hadoop-env.sh devem ser somente alteradas de acordo com as linhas abaixo.

vi /hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME="/usr/lib/jvm/jre-openjdk"
export HADOOP_CONF_DIR="/hadoop/etc/hadoop"

Criar o arquivo "master" para a definição do nó principal do cluster.

vi /hadoop/etc/hadoop/masters

Adicionando o nome abaixo;

hadoop-master

Agora é a vez do arquivo "slave" para a definição dos nós segundaríos do cluster.

vi /hadoop/etc/hadoop/slaves

e adicione os nomes abaixo;

hadoop-slave1
hadoop-slave2

Editar o arquivo "workers" excluindo tudo o conteudo e digitar dentro dele os hostnames dos nós:

vi /hadoop/etc/hadoop/workers

hadoop-slave1
hadoop-slave2

Criar um diretório para poder conter todos os arquívos de logs;

mkdir -p /hadoop/logs

Criar um diretório para armazenar arquivos temporários do hadoop;

mkdir -p /hadoop/tmp

Criar os diretórios para conter o "namenode" e o "datanode".

mkdir -p /hadoop/hdfs/namenode mkdir -p /hadoop/hdfs/datanode

Cópia da pasta "hadoop" já configurada para todos os nós disponiveis.

Copiar a pasta já configurada para os todos os nós disponiveis a partir do nó "hadoop-master";

sudo su scp -r /hadoop hadoop-slave1:/ scp -r /hadoop hadoop-slave2:/ exit

Nesse passo iremos mudar o proprietário da pasta hadoop dos nós lembrando que sempre estaremos executando os comandos no nó "hadoop-master".

Mudando o proprietário no nó "hadoop-slave1":

ssh -t hadoop-slave1 'sudo chown -R hadoop:hadoop /hadoop'

Mudando o proprietário no nó "hadoop-slave2":

ssh -t hadoop-slave2 'sudo chown -R hadoop:hadoop /hadoop'

Preparar o HDFS para receber os dados

Formatar e iniciar o cluster HDFS para poder acolher todos os nossos dados.

Obs.: Os comandos a seguir serão sempre executados no nó "hadoop-master"

hdfs namenode -format

Iniciar o serviço do Hadoop para poder inserir os primeiros arquívos

start-dfs.sh

Verificar se o cluster conseguiu iniciar sem erros

hdfs dfsadmin -report

se tudo funcionou esse comando irá retornar a capacidade e os nós ativos.

Executar o serviço "Yarn"

start-yarn.sh

Para monitorar se o cluster hadop está funcionando redondo podemos apontar o nosso browser para o seguinte endereço:

http://192.168.100.2:9870

Enquanto para monitorar o Yarn Resource manager será necessário apontar o nosso browser para o seguinte endereço:

http://192.168.100.2:8088

Brincando com o HDFS

Iniciaremos com a criação de uma pasta dentro do nosso File System distribuído usando o comando:

hdfs dfs -mkdir -p /user/hadoop

e logo em seguida criaremos uma pasta dentro do nosso usuário hadoop que chamaremos de "livros" com esse comando:

hdfs dfs -mkdir -p /user/hadoop/livros

Para ver se foi criada corretamente digitar o comando:

hdfs dfs -ls /user/hadoop

Criamos agora um arquívo de texto a partir de um comando que gera muita saída de mensagems digitando o comando abaixo:

dmesg > ~/teste.txt

Iremos copiar o arquívo "teste.txt" dentro da pasta "livros" que foi criada antes

hdfs dfs -put ~/teste.txt /user/hadoop/livros

Para listar os arquivos contidos na pasta do hadoop iremos digitar:

hdfs dfs -ls /user/hadoop/livros

Agora iremos lêr o conteudo do arquívo teste que está no HDFS

hdfs dfs -cat livros/teste.txt

Com esse passo iremos copiar o arquivo teste.txt que está no HDFS para a pasta /tmp do nosso Sistema Operacional que hospeda o hadoop.

hdfs dfs -get livros/teste.txt /tmp

Vamos ver se isso aconteceu de fato digitano o comando:

ls -la /tmp/teste.txt cat /tmp/teste.txt

Para mostrar o help dos comandos que o HDFS contém podem ser usados os seguintes comandos:

hdfs dfs -help

Para parar o serviço do hadoop é necessário digitar os comandos:

stop-yarn.sh stop-all.sh

E por fim para será necessário desligar todas as VMs e faremos isso sempre executando os comandos a partir do nó "hadoop-master"

ssh -t hadoop-slave2 'sudo shutdown -h now' ssh -t hadoop-slave1 'sudo shutdown -h now' ssh -t hadoop-master 'sudo shutdown -h now'

Informações inerentes a essa matéria. Você pode consultar os seguintes recursos sobre este tópico. Embora sejam fornecidos com a esperança de que sejam úteis, observe que não podemos garantir a precisão ou a funcionalidade dos materiais hospedados externamente.

https://hadoop.apache.org/docs/r3.2.1/ https://hadoop.apache.org/docs/r3.2.1/hadoop-yarn https://hadoop.apache.org/docs/r3.2.1/FileSystemShell.html https://hadoop.apache.org/docs/r3.2.1/core-default.xml https://hadoop.apache.org/docs/r3.2.1/hdfs-default.xml https://hadoop.apache.org/docs/r3.2.1/mapred-default.xml https://hadoop.apache.org/docs/r3.2.1/yarn-default.xml

 
Tags:

Posts Consigliati