Instalando o Hadoop

Introdução

Essa semana na minha aula de especialização, fizemos a instalação do Apache Hadoop. Vou repassar o procedimento aqui, instalando para uso apenas em nossa em uma máquina (cluster single-node ou Pseudo-Distributed Mode).

Refiz o procedimento algumas vezes com versões diferentes para integração posterior com o Apache Spark, o Apache Flume, o Apache Oozie, e o Hive.

Em outro tutorial, pretendo usar estes três últimos para fazermos um teste com a Twitter Streaming API.

#1 – Validando o Java

Primeiro precisamos ter instalado uma versão do Java. Para essa versão do Hadoop, precisamos da versão 8 do SDK. Vamos testar se o SO possui alguma versão instalada através do comando:

[raw]
# java -version

java version “1.8.0_101”
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[/raw]

#2 – Criando usuário Hadoop

É recomendado criar uma conta de usuário sem privilégios (não root) para uso do Hadoop. Para criar uma conta de sistema usamos o comando abaixo:

[raw]
# adduser hadoop
# passwd hadoop
[/raw]

Após criarmos uma conta, vamos definir uma chave ssh para essa conta. Para fazer isso execute o comando abaixo:

[raw]
# su – hadoop
$ ssh-keygen -t rsa -P “”
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
[/raw]

Vamos conectar no serviço SSH pela primeira vez para adicionar uma permissão definitiva para a chave que acabamos de criar:

[raw]
$ ssh localhost
$ exit
[/raw]

#3 – Baixando Hadoop 2.8.0

Para esse tutorial vamos usar a versão 2.8.0 do hadoop, que pode ser baixado do site do Hadoop, ou pelos comandos abaixo:

[raw]
$ cd ~
$ wget http://ftp.unicamp.br/pub/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
$ tar xzf hadoop-2.8.0.tar.gz
$ mv hadoop-2.8.0 hadoop
[/raw]

#4 – Configurando em Pseudo-Distributed Mode (Falso Distribuido)

Variáveis de Ambiente

Vamos definir as variáveis de ambiente para uso do Hadoop. Vamos editar o arquivo ~/.bashrc e adicionar as novas variáveis.

[raw]
vi ~/.bashrc
[/raw]

Insira o conteúdo abaixo.

Vamos agora recarregar a ativar as novas variáveis.

[raw]
source ~/.bashrc
[/raw]

Note que a variável JAVA_HOME, poderá ser inserida nesse ponto para ser usada de forma geral por todas as aplicações java que não definirem a própria JVM. No caso do hadoop, poderemos definir de forma isolada através do arquivo hadoop-env.sh.

Abra o arquivo:

[raw]
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
[/raw]

Descomente e ajuste a linha abaixo:

Arquivos de Configuração

Vamos ajustar os arquivos de configuração do Hadoop que definem como será a infraestrutura do Hadoop. Vamos iniciar configurando ele para rodar em modo single-node.

Entre na pasta:

[raw]
$ cd $HADOOP_HOME/etc/hadoop
[/raw]

Editar core-site.xml

Esse arquivo serve para que o hadoop saiba quem é o servidor master do cluster, ou seja, o servidor namenode, nesse caso estamos ajustando para que seja a própria máquina.

Editar hdfs-site.xml

Esse arquivo definir como o HDFS vai gerenciar os arquivos.

dfs.replication define a quantidade de réplicas dos clusters.
dfs.namenode.name.dir define onde serão gravados os metadados que o namenode usa para gerenciar o cluster.
dfs.datanode.data.dir define onde serão armazenados os arquivos dentro do hdfs.

Editar mapred-site.xml

Agora vamos editar o mapred-site.xml, esse arquivo não existe por padrão, é necessário copiar o mapred-site.xml.template e depois editá-lo.

mapreduce.framework.name define qual será o framework de mapreduce que você vai utilizar par analisar os dados.
mapreduce.jobhistory.webapp.address define o endereço onde serão guardados o histórico das jobs.

Editar yarn-site.xml

Agora é necessário editar o yarn-site.xml, o conteúdo dele deve ser parecido com o abaixo.

yarn.resourcemanager.hostname define qual é o hostname do seu servidor com yarn
yarn.resourcemanager.bind-host define quais endereço o yarn irá ouvir
yarn.nodemanager.bind-host define quais endereços podem se conectar como nodes do yarn
yarn.nodemanager.aux-services define o serviço que vai fazer o shuffle dos dados do hadoop
yarn.nodemanager.remote-app-log-dir define onde ficarão os logs do yarn.

Essa questão do shuffle é quando você aplica um algoritmo de mapreduce, por exemplo, em todas as pastas do cluster eu quero saber a ocorrência das palavras dentro dos arquivos, essa busca é feita em todos os datanodes e esse shuffle mistura os dados trazendo um único resultado, mais pra frente vou fazer um post explicando como isso funciona.

Formatar Namenode

Vamos formatar o namenode usando o seguinte comando:

[raw]
$ hdfs namenode -format
[/raw]

Resultado do comando deverá ser algo assim:

[raw]
17/08/24 12:58:43 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/127.0.0.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.8.0


17/08/24 12:58:57 INFO common.Storage: Storage directory /home/hadoop/hadoopdata/hdfs/namenode has been successfully formatted.
17/08/24 12:58:57 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
17/08/24 12:58:57 INFO util.ExitUtil: Exiting with status 0
17/08/24 12:58:57 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/
[/raw]

Vamos criar os diretórios HDFS necessários usando os seguintes comandos:

[raw]
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop
[/raw]

#5 – Iniciando o Hadoop Cluster

Vamos iniciar o nosso Cluster Hadoop, usando os scritps que são fornecidos pelo Hadoop. Vamos acessar o diretório sbin, e executar um comando de cada vez:

[raw]
$ cd $HADOOP_HOME/sbin/
[/raw]

Execute agora o script start-dfs.sh:

[raw]
$ start-dfs.sh
[/raw]

Exemplo do resultado do comando:

[raw]
17/08/24 13:00:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host ‘0.0.0.0 (0.0.0.0)’ can’t be established.
RSA key fingerprint is 3c:c4:f6:f1:72:d9:84:f9:71:73:4a:0d:55:2c:f9:43.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added ‘0.0.0.0’ (RSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out
17/08/24 13:01:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
[/raw]

Execute agora o script start-yarn.sh:

[raw]
$ start-yarn.sh
[/raw]

Exemplo do resultado do comando:

[raw]
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-localhost.localdomain.out
localhost: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-localhost.localdomain.out
[/raw]

Vamos verificar se o cluster esta rodando através do comando jps

[raw]
# jps

5298 DataNode
5092 NameNode
5734 ResourceManager
5542 SecondaryNameNode
14024 Bootstrap
5899 NodeManager
6111 Jps
[/raw]

Se os seis serviços aparecerem, o seu cluster está OK.

#6 – Acessando o Hadoop no Navegador

Hadoop NameNode inicia na porta 50070 por padrão. Acesse o servidor no seu navegador preferido:

[raw]
http://localhost:50070/
[/raw]

Vamos acessar a porta 8088 para obter as informações sobre o cluster e todas as aplicações.

[raw]
http://localhost:8088/
[/raw]

Acesse a porta 50075 para obter os detalhes do DataNode

[raw]
http://localhost:50075/
[/raw]

Podemos ver o conteúdo da pasta que criamos:

[raw]
http://localhost:50070/explorer.html#/user/
[/raw]

One comment

  1. Marcel, tudo bem? Eu estou configurando ele no Windows e consigo subir todos os Daemons e subir arquivos pela linha de comando HDFS, porém não consigo subir arquivos para o DFS pela webpage localhost:50070, ele retorna um erro de permissão para o user Dr.Who. Saberia me informar o que posso fazer para conseguir subir os dados sem ser por linha de comando?

Leave a Reply

Pin It on Pinterest