Este guia tem como princípio auxiliar na execução do Hadoop Map Reduce via Docker. Realizando testes de um job map reduce com Java e uma job em Python através do Hadoop Streaming. Os códigos das jobs de exemplo foram retirados do livro The Hadoop Fundamentals for Data Scientists. A job é um exemplo clássico de contador de palavras num texto de Shakespeare e lista de nomes.
Lembrando que nesse guia não mostrarei como foi feito a instalação do Hadoop no Docker. A imagem já está pronta, basta seguir as instruções para fazer o teste.
Os passos a seguir foram feitos numa máquina Linux com a distribuição do Ubuntu.
Antes de tudo você precisa ter o docker instalado, para isso execute o comando a seguir caso não tenha:
sudo apt-get install docker.io
sudo docker ps -a
sudo docker pull gutomelo/hadoop3
sudo docker run -it --name Hadoop -d -p 9870:9870 -p 8088:8088 gutomelo/hadoop3:latest
A imagem já vem com os arquivos de testes, que inclusive já se encontra nesse repositório.
sudo docker exec -it Hadoop sh
sudo su
jps
cd /home/docker-hadoop3/WordCount
Agora nesse momento iremos compilar os arquivos Java, lembrando que devemos que compilar os três arquivos, porque um é dependente dos outros.
hadoop com.sun.tools.javac.Main WordCount.java WordMapper.java SumReducer.java
Se você der o comandos 'ls', verá que foi criado os três arquivos .class "WordCount.class WordMapper.class SumReducer.class".
jar cf wc.jar WordCount.class WordMapper.class SumReducer.class
OBS: Os arquivos de inputs "shakespeare.txt" e "names.txt" já foram inseridos no hdfs através dos comandos "hadoop fs -put origemlocal destinohdfs". Ex: "hadoop fs -put /home/docker-hadoop3/WordCount/names.txt /".
hadoop jar wc.jar WordCount /shakespeare.txt /wordcounts
hadoop fs -ls /wordcounts
hadoop fs -cat /wordcounts/part-r-00000
hadoop jar wc.jar WordCount /names.txt /namescounts
hadoop fs -ls /namescounts
hadoop fs -cat /namescounts/part-r-00000
cd /home/docker-hadoop3/StreamingWordCount
mapred streaming -input /shakespeare.txt -output /shakespeare_python -mapper mapper.py -reducer reducer.py -file mapper.py -file reducer.py
hadoop fs -ls /shakespeare_python
hadoop fs -cat /shakespeare_python/part-00000
mapred streaming -input /names.txt -output /names_python -mapper mapper.py -reducer reducer.py -file mapper.py -file reducer.py
hadoop fs -ls /names_python
hadoop fs -cat /names_python/part-00000