carlosemsantana / docker-hadoop

Preparação de um ambiente de desenvolvimento e testes para Apache Hadoop.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Instalação e Configuração de um container Docker Apache Hadoop

Resumo

Este documento foi elaborado, com informações básicas sobre como você pode preparar um ambiente de testes Apache Hadoop, usando um container Docker em sua máquina local.

Construir um ambiente de desenvolvimento e testes em um container Docker local não será uma tarefa fácil, mas nos permitirá, estudar, aprender, depurar erros, assim como, executar aplicações de análise de dados que forem propostas nas aulas do curso de Formação Cientista de Dados da Data Science Academy.

O curso de Formação Cientista de Dados explica passo-a-passo como instalar e configurar em uma VM VirtualBox com Linux CentOS, o Apache Hadoop e alguns dos produtos do seu Ecossistema.

Objetivo deste documento, é ajudar na instalação e configuração manual de um container Docker Apache Hadoop, em modo Pseudo-Distribuído (Pseudo-Distributed).

No final desta jornada, teremos um ambiente de testes para estudos, onde será produtivo experimentar um framework para soluções de Big Data, tanto para armazenamento, quando processamento de dados distribuído.

Aviso

Esta é uma sugestão de uma configuração inicial para uso em máquinas de testes. Não implemente em ambiente de produção.

Pré-requisitos:

- Máquina com arquitetura 64Bits e sistema operacional Linux instalado;
- Você precisa ter o Docker instalado em sua máquina local;
- Noções básicas do funcionamento do Docker;

Lembrando que:

Quando estiver trabalhando no container, não use o comando exit para sair do console, se fizer seu container morre e você perderá todos os pacotes instalados até este ponto.

Use o seguinte atalho do teclado:

Mantenha o botão Crtl pressionado +p + q

Assim, você sairá do container e ele continuará em execução.

$ docker attach <ID do Container> (voltar ao container)

Na ilustração acima, os ambientes, máquina local e container Docker estão isolados, apesar de compartilharem dos recursos de equipamento físico da máquina local.

Iniciar a instalação

$ docker pull centos

  • Caso você tenha uma imagem local, use a instrução:
$ docker pull localhost:5000/centos

Execute o Containers Docker CentOS

  • Para subir um container em modo interativo, use instrução:
$ docker container run -ti localhost:5000/centos 

  • Caso sua imagem esteja local, use a instrução:
$ docker container run -ti centos 

Preparando o ambiente CentOS

Instalaremos alguns utilitários, pacotes adicionais e configuraremos o serviço SSH. Execute as instruções abaixo:

$ yum update -y
$ yum install kernel -y
$ yum install kernel-devel -y
$ yum install kernel-headers -y
$ yum install initscripts -y
$ yum install gcc -y
$ yum install make -y
$ yum install perl -y
$ yum install ncurses -y
$ yum install bzip2 -y
$ yum install unzip -y
$ yum install rsync -y
$ yum install wget -y
$ yum install net-tools -y
$ yum install nano -y
$ yum install iproute -y
$ yum install passwd -y
$ yum install sudo -y
$ yum install openssh-server -y
$ yum install openssh-clients -y

Configure o SSH

Edite o arquivo /etc/ssh/sshd_config e ajuste os seguintes parâmetros:

Port 22
ListemAdress 0.0.0.0
PermitRootLogin No
AllowUsers hadoop 

Editaremos com o nano, mas pode ser usado qualquer editor.

$ sudo nano /etc/ssh/sshd_config

Continuando...

Para gravar as alterações, use o atalho do teclado: (Ctrl + x + Y)

Incluir os usuários de trabalho e administração

Com usuário administrador root execute as instruções abaixo:

$ adduser santana (cria usuário de trabalho)
$ adduser hadoop  (cria usuário de administração)
$ passwd santana
$ passwd hadoop

Edite o arquivo sudoers e ajuste as permissões do usuário hadoop, idênticas ao do usuário root no arquivo.

$ sudo nano /etc/sudoers

Crie as chaves SSH no CentOS

Para gerar uma chave SSH em seu servidor Linux, execute o comando ssh-keygen.

$ ssh-keygen -A 

Configure acesso SSH, sem senha para o usuário hadoop

Verifique o acesso ssh localhost, é possível acessar sem uma senha? execute a instrução abaixo:

$ ssh localhost

No console, não foi possível acessar sem uma senha. O Apache Hadoop precisa que o acesso seja via SSH e sem senha.

Para resolver esse problema, execute as instruções abaixo:

  $ su hadoop
  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys
  $ sudo rm /run/nologin

Verifique o acesso com o usuário root.

$ su root
$ ssh localhost

Correto! o usuário root não tem permissão para acesso remoto no serviço.

Verifique o acesso com o usuário hadoop.

$ su hadoop
$ ssh localhost

Funcionou! o usuário hadoop tem acesso sem senha no ssh, agora podemos continuar a instalação do Apache Hadoop.

A partir deste ponto, você pode acessar o container via comandos docker attach ou ssh .

Para descobrir o IP do container use a instrução docker inspect <ID do Container>.

Backup

Agora que finalizamos a primeira etapa da preparação do ambiente, enviaremos uma imagem customizada do container CentOS, para o repositório local. .

Lembre-se, para sair do container e deixá-lo ainda em execução, é necessário pressionar Crtl + p + q.

$ docker container ls

Listaremos os containers em execução para descobrir qual é o ID do CONTAINER que estamos customizando.

$ docker commit -m "Apache Hadoop" <ID do Container>

Imagem gerada com sucesso! agora enviaremos a imagem para o repositório local. (Backup)

$ docker image ls

A imagem customizada foi gerada, agora renomearemos a TAG e o repositório.

$ docker tag 6361bba42a00 localhost:5000/centos:8.0

Feito! a imagem foi renomeada, agora vamos enviá-la para o repositório Docker Local.

$ docker push localhost:5000/centos:8.0

Pronto! imagem arquivada com sucesso.

Criaremos Volumes Docker para compartilharmos arquivos com a máquina local.

Para criar um volume, execute as instruções abaixo:

$ docker volume create datasets
$ docker volume create hadoop_home

Os volumes foram criados, agora subiremos nova instância do container customizada para acesso às pastas.

Para exibir os containers ativos, execute as instruçôes abaixo:

$ docker ps

$ docker stop 6aa313b91f6d

O container foi encerrado. Agora, subiremos o novo container com os acessos compartilhados.

Para instanciar o novo container, execute a instrução abaixo:

$ docker container run -ti \
    --mount type=volume,source=datasets,destination=/opt \
    --mount type=volume,source=hadoop_home,destination=/home/hadoop \
    localhost:5000/centos:8.0

Pronto, o novo container foi criado. Testaremos os compartilhamentos de arquivos.

Para descobrir onde os volumes foram criados na máquina local, digite no console da máquina local a instrução abaixo:

$ docker inspect datasets

Acesse cd /var/lib/docker/volumes/datasets/_data padronize neste diretório, cópia de todos os pacotes do Apache Hadoop baixados.

Para testarmos o mapeamento, faça uma copia do JDK para o diretório.

$ docker inspect hadoop_home

Acesse cd /var/lib/docker/volumes/hadoop_home/_data Este será um diretório persistente do usuário hadoop.

Início da Instalação do Apache Hadoop

O ambiente Hadoop será instalado e configurado com o login hadoop.

Para logar no container com usuário hadoop, digite no console do container su hadoop

Iniciar a instalação do Java 1.8

Precisamos instalar o Java 8 porque alguns pacotes do Apache Hadoop, não são compatíveis com versões superiores do JDK.

Faça o download do pacote JDK no site da Oracle para sua máquina local e depois copie o pacote para:

 /var/lib/docker/volumes/datasets/_data

Eu vou usar o pacote TAR para a customização e padronização do ambiente.

O Java 1.8 foi baixado e copiado para o diretóriodatasets na máquina local que é o diretório /opt no container Hadoop, esta customização nos permitirá agilidade na troca de arquivos entre os ambientes de teste e desenvolvimento.

  1. Para instalar o java você precisa descompactar o arquivo jdk-8u281-linux-x64.tar.gz em /opt e configurar as variáveis de ambiente.

Para instalar o JDK execute a sequencia de instruções abaixo, no console do container:

$ su hadoop
$ cd /opt
$ sudo tar xvf jdk-8u281-linux-x64.tar.gz
$ sudo chown hadoop:hadoop -R jdk1.8.0_281/
$ sudo mv jdk1.8.0_281/ jdk/
$ sudo chmod 775 -R jdk

Feito, o java foi copiado para /opt, a nomenclatura e as permissões foram ajustadas. Agora configuraremos as variáveis de ambiente e testaremos.

Edite o arquivo .bashrc e inclua as variáveis de ambiente do JAVA (JDK)

Execute a sequencia de instruções abaixo:

$ cd 
$ nano .bashrc (nano é um editor de texto leve e amigável para o Shell do Linux)

# JAVA
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin

$ source .bashrc

Testaremos e verificaremos se o Java (JDK) foi instalado corretamente.

O java 1.8 foi instalado com sucesso.

Instalação do Hadoop

Faça o download do pacote Hadoop no site da Apache Software Fundation para sua máquina local.

Quando o download terminar, copie o pacote para: /var/lib/docker/volumes/datasets/_data em sua máquina local, e inicie a instalação do Hadoop.

Resumindo:

A instalação do Hadoop, consiste em descompactar, e copiar o arquivo baixado para o diretório /opt, ajustar as permissões, nomenclaturas e inserir as variáveis de ambiente no arquivo .bashrc do usuário hadoop. Conforme sequência de instruções abaixo:

$ sudo cp hadoop-3.2.2.tar.gz /var/lib/docker/volumes/datasets/_data
$ docker attach bb2b1c7c82fb
$ cd /opt
$ id (caso não esteja logado como hadoop, digite su haddop)
$ sudo tar xvf hadoop-3.2.2.tar.gz
$ sudo mv hadoop-3.2.2 hadoop
$ sudo chown hadoop:hadoop hadoop -R
$ sudo chmod 775 hadoop -R
$ mkdir /home/hadoop/Downloads
$ sudo mv hadoop-3.2.2.tar.gz /home/hadoop/Downloads
$ clear
$ ls -lia

Agora ajustaremos as variáveis de ambiente no arquivo .bashrc, seguindo as instruções abaixo:

$ cd
$ nano .bashrc

# Apache Hadoop
export HADOOP_HOME=/opt/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

$ source .bashrc

As variáveis de ambiente foram configuradas. Execute a instrução abaixo:

$  hadoop version

Feito! toda a configuração foi realizada com sucesso.

Configuração do Hadoop

Configuraremos o Hadoop no Modo Pseudo-Distribuído (Pseudo-Distributed).

Edite os arquivos de configuração, que estão no diretório /opt/hadoop/etc/hadoop e insira respectivamente os parâmetros abaixo:

  1. core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

  1. hdfs-site.xml
<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>

O processo de instalação e configuração do Apache Hadoop foi concluído.

Iniciaremos o HDFS - Gerenciador de arquivos distribuído

Execute as seguintes instruções:

  1. Formate o sistema de arquivos:
$ hdfs namenode -format

O sistema de arquivos foi formatado com sucesso!

  1. Inicializando o HDFS. Para inicializar o HDFS, execute a instrução abaixo:
$ start-dfs.sh

Ocorreu um erro! este problema ocorre porque precisamos inicializar o serviço SSH.

  1. Para inicializar o SSH no container digite:
$ sudo /usr/sbin/sshd
  1. Iniciaremos novamente o HDFS.
$ start-dfs.sh

Pronto, o serviço HDFS foi inicializado!

Experimento

$ jps (Esta é uma instrução, que permite visualizar todos os serviços do Hadoop em execução.)

Os serviços estão rodando.

Para você acessar o Namenode via browser, e ver detalhes do ambiente.

Abra o seu navegador favorito, digite o IP do container e a porta.

$ http://172.17.0.3:9870/ 

Recomendo, navegar e explorar as opções.

Comandos adicionais:

$ hdfs dfs -ls /
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop
$ hdfs dfs -put /opt/hadoop/etc/hadoop/*xml /user/hadoop
$ hdfs dfs -ls /user/hadoop
$ stop-dfs.sh

Pronto! ambiente funcionando perfeitamente.

Configurando e inicializando o YARN

O YARN é um gerenciador de recursos para Apache Hadoop.

O YARN roda sobre o HDFS e permite diferentes mecanismos de processamento de dados. O Apache YARN é considerado o sistema operacional de dados do Hadoop.

Para habilitar o YARN edite os arquivos de configuração, mapred-site.xml e yarn-site.xml, que estão no diretório /opt/hadoop/etc/hadoop, e insira respectivamente os parâmetros abaixo:

  1. mapred-site.xml:
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
<property>
  <name>mapreduce.application.classpath</name>
  <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>

Grave a configuração.

  1. yarn-site.xml:
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>

Grave a configuração.

Inicializaando o YARN

Execute as seguintes instruções:

$ start-yarn.sh

Os serviços foram inicializados.

$ jps

Os serviços HDFS e YARN estão rodando.

Para acessar o ResourceManager via browser e ler os detalhes do ambiente, abra o seu browser favorito, informe o seu IP, conforme instrução abaixo:

$ http://172.17.0.3:8088/

Recomendo, navegar e explore as opções. E, antes de sair, encerre os serviços.

$ stop-yarn.sh (YARN)
$ stop-dfs.sh (HDFS)
$ docker container stop <ID do Container> (Container Docker que está rodando o Hadoop)

Pronto!

Chegou o final da jornada, para a instalação e configuração do Apache Hadoop em um container Docker.

Espero ter contribuido com o seu desenvolvimento de alguma forma.

Carlos Eugênio

Referências

  1. Curso de Formação Cientista de Dados da Data Science Academy
  2. Docker Hub
  3. Livro: Descomplicando o Docker 2a edição
    Jeferson Fernando Noronha Vitalino
    Marcus André Nunes Castro
  4. The Hadoop Ecosystem Table
  5. Gerando e usando chaves SSH para autenticação de host remoto
  6. Configurar acesso Cluster Pseudo-Distribuído
  7. Volumes Dockers
  8. Apache Hadoop
  9. Apache Hadoop YARN

About

Preparação de um ambiente de desenvolvimento e testes para Apache Hadoop.

License:MIT License