LINUX

Cómo configurar un clúster Hadoop de nodo único mediante Docker

En este artículo, le mostraré cómo configurar un clúster hadoop de un solo nodo utilizando Docker. Antes de comenzar con la configuración, permítame recordarle brevemente qué son Docker y Hadoop.

Docker es una plataforma de contenedorización de software donde empaqueta su aplicación con todas las bibliotecas, dependencias y entornos en un contenedor. Este contenedor se llama contenedor docker. Con Docker, puede crear, enviar y ejecutar una aplicación (software) sobre la marcha.

Por ejemplo, si desea probar una aplicación en un sistema ubuntu, no necesita configurar un sistema operativo completo en su computadora portátil / escritorio o iniciar una máquina virtual con ubuntu os. Eso llevará mucho tiempo y espacio. Simplemente puede iniciar un contenedor docker de ubuntu que tendrá el entorno, las bibliotecas que necesita para probar su aplicación sobre la marcha.

Apache Hadoop es un marco que permite el procesamiento distribuido de grandes conjuntos de datos en grupos de computadoras. En estos días es una de las tecnologías más importantes de la industria. Ahora, para usar Hadoop para almacenar y analizar una gran cantidad de datos, necesita configurar un clúster de Hadoop. Si ya ha configurado el clúster hadoop antes, sabe que no es una tarea fácil.

¿Qué pasa si digo que configurar un clúster de hadoop no es un trabajo de 5 a 10 minutos? ¿Me creerán? ¡Supongo que no!

Aquí es donde Docker entra en escena, y usando Docker puede configurar un clúster hadoop en poco tiempo.

Beneficios de usar Docker para configurar un clúster hadoop

  • Instala y ejecuta hadoop en poco tiempo.
  • Utiliza los recursos según las necesidades, por lo que no se desperdicia ningún recurso.
  • Fácilmente escalable, más adecuado para entornos de prueba en clúster hadoop.
  • No se preocupe por las dependencias de hadoop, bibliotecas, etc., Docker se encargará de ello.

Configurar un clúster Hadoop de un solo nodo mediante Docker

Veamos ahora cómo configurar un clúster hadoop de un solo nodo utilizando Docker. Estoy usando el sistema Ubuntu 16.04 y Docker ya está instalado y configurado en mi sistema.

Antes de configurar un clúster hadoop de un solo nodo usando Docker, permítanme ejecutar un ejemplo simple para ver que Docker está funcionando correctamente en mi sistema.

Déjame comprobar si tengo alguna imagen de la ventana acoplable a partir de ahora.

hadoop@hadoop-VirtualBox:~$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

No tengo ninguna imagen de Docker a partir de ahora. Permítanme ejecutar un ejemplo simple de ventana acoplable de hola mundo.

hadoop@hadoop-VirtualBox:~$ docker run hello-world

Hello from Docker!

This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
    1. El cliente de Docker se puso en contacto con el demonio de Docker.
    1. El demonio de Docker extrajo la imagen «hello-world» del Docker Hub.
    1. El demonio de Docker creó un nuevo contenedor a partir de esa imagen que ejecuta el

ejecutable que produce la salida que está leyendo actualmente.

    1. El demonio de Docker transmitió esa salida al cliente de Docker, que la envió

a su terminal. Para probar algo más ambicioso, puede ejecutar un contenedor de Ubuntu con: $ docker run -it ubuntu bash Comparta imágenes, automatice flujos de trabajo y más con una cuenta gratuita de Docker Hub: https://hub.docker.com Para obtener más ejemplos e ideas , visite: https://docs.docker.com/engine/userguide/

Entonces, ahora sabe que la ventana acoplable funciona correctamente. Sigamos adelante e instalemos hadoop en un contenedor acoplable. Para hacerlo, necesitamos una imagen de la ventana acoplable hadoop. El siguiente comando me dará una imagen de la ventana acoplable hadoop-2.7.1.

hadoop@hadoop-VirtualBox:~$ sudo docker pull sequenceiq/hadoop-docker:2.7.1

[sudo] password for hadoop:

2.7.1: Pulling from sequenceiq/hadoop-docker

b253335dcf03: Pull complete

a3ed95caeb02: Pull complete

11c8cd810974: Pull complete

49d8575280f2: Pull complete

2240837237fc: Pull complete

e727168a1e18: Pull complete

ede4c89e7b84: Pull complete

a14c58904e3e: Pull complete

8d72113f79e9: Pull complete

44bc7aa001db: Pull complete

f1af80e588d1: Pull complete

54a0f749c9e0: Pull complete

f620e24d35d5: Pull complete

ff68d052eb73: Pull complete

d2f5cd8249bc: Pull complete

5d3c1e2c16b1: Pull complete

6e1d5d78f75c: Pull complete

a0d5160b2efd: Pull complete

b5c5006d9017: Pull complete

6a8c6da42d5b: Pull complete

13d1ee497861: Pull complete

e3be4bdd7a5c: Pull complete

391fb9240903: Pull complete

Digest: sha256:0ae1419989844ca8b655dea261b92554740ec3c133e0826866c49319af7359db

Status: Downloaded newer image for sequenceiq/hadoop-docker:2.7.1

Ejecute el siguiente comando para comprobar si la imagen del expediente hadoop se descargó correctamente.

hadoop@hadoop-VirtualBox:~$ docker images

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE

hello-world                latest              c54a2cc56cbb        5 months ago        1.848 kB

sequenceiq/hadoop-docker   2.7.1               e3c6e05ab051        2 years ago         1.516 GB

hadoop@hadoop-VirtualBox:~$

Ahora ejecute esta imagen de la ventana acoplable, que creará un contenedor de la ventana acoplable donde se ejecutará hadoop-2.7.1.

hadoop@hadoop-VirtualBox:~$ docker run -it sequenceiq/hadoop-docker:2.7.1 /etc/bootstrap.sh -bash

/

Starting sshd:                                             [  OK  ]

Starting namenodes on [e34a63e1dcf8]

e34a63e1dcf8: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-e34a63e1dcf8.out

localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-e34a63e1dcf8.out

Starting secondary namenodes [0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-e34a63e1dcf8.out

starting yarn daemons

starting resourcemanager, logging to /usr/local/hadoop/logs/yarn--resourcemanager-e34a63e1dcf8.out

localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-e34a63e1dcf8.out

Ahora que se ha iniciado el contenedor de la ventana acoplable, ejecute el comando jps para ver si los servicios de hadoop están en funcionamiento.

bash-4.1# jps

291 SecondaryNameNode

560 NodeManager

856 Jps

107 NameNode

483 ResourceManager

180 DataNode

bash-4.1#

Abra una nueva terminal y ejecute el siguiente comando para ver la lista de contenedores que se están ejecutando y sus detalles.

hadoop@hadoop-VirtualBox:~$ docker ps

CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                                                                                   NAMES

e34a63e1dcf8        sequenceiq/hadoop-docker:2.7.1   "/etc/bootstrap.sh -b"   44 minutes ago      Up 44 minutes       22/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp   condescending_poincare

Vuelva a su terminal de contenedores de la ventana acoplable y ejecute el comando siguiente para obtener la dirección IP del contenedor de la ventana acoplable.

bash-4.1# ifconfig

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02

inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0

inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:56 errors:0 dropped:0 overruns:0 frame:0

TX packets:31 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:6803 (6.6 KiB)  TX bytes:2298 (2.2 KiB)

 

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:65536  Metric:1

RX packets:28648 errors:0 dropped:0 overruns:0 frame:0

TX packets:28648 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1

RX bytes:4079499 (3.8 MiB)  TX bytes:4079499 (3.8 MiB)

bash-4.1#

Después de ejecutar el comando jps, ya vimos que todos los servicios se estaban ejecutando, ahora verifiquemos la interfaz de usuario de namenode en el navegador. Ir 172.17.0.2: 50070 en el navegador, y listo, namenode ui de un clúster hadoop que se ejecuta en un contenedor docker.

Solo para asegurarnos de que el clúster de hadoop funciona bien, ejecutemos un ejemplo de mapreduce de hadoop en el contenedor de la ventana acoplable.

bash-4.1# cd $HADOOP_PREFIX

bash-4.1# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'

16/11/29 13:07:02 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

16/11/29 13:07:07 WARN mapreduce.JobSubmitter: No job jar file set.  User classes may not be found. See Job or Job#setJar(String).

16/11/29 13:07:08 INFO input.FileInputFormat: Total input paths to process : 27

16/11/29 13:07:10 INFO mapreduce.JobSubmitter: number of splits:27

16/11/29 13:07:12 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1480434980067_0001

16/11/29 13:07:14 INFO mapred.YARNRunner: Job jar is not present. Not adding any jar to the list of resources.

16/11/29 13:07:15 INFO impl.YarnClientImpl: Submitted application application_1480434980067_0001

16/11/29 13:07:16 INFO mapreduce.Job: The url to track the job: http://e34a63e1dcf8:8088/proxy/application_1480434980067_0001/

16/11/29 13:07:16 INFO mapreduce.Job: Running job: job_1480434980067_0001

16/11/29 13:07:58 INFO mapreduce.Job: Job job_1480434980067_0001 running in uber mode : false

16/11/29 13:07:58 INFO mapreduce.Job:  map 0% reduce 0%

16/11/29 13:10:44 INFO mapreduce.Job:  map 22% reduce 0%

16/11/29 13:13:40 INFO mapreduce.Job:  map 22% reduce 7%

16/11/29 13:13:41 INFO mapreduce.Job:  map 26% reduce 7%

16/11/29 13:20:30 INFO mapreduce.Job:  map 96% reduce 32%

16/11/29 13:21:01 INFO mapreduce.Job:  map 100% reduce 32%

16/11/29 13:21:04 INFO mapreduce.Job:  map 100% reduce 100%

16/11/29 13:21:08 INFO mapreduce.Job: Job job_1480434980067_0001 completed successfully

16/11/29 13:21:10 INFO mapreduce.Job: Counters: 50

File System Counters

FILE: Number of bytes read=345

FILE: Number of bytes written=2621664

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=64780

HDFS: Number of bytes written=437

HDFS: Number of read operations=84

HDFS: Number of large read operations=0

HDFS: Number of write operations=2

Launched map tasks=29

Launched reduce tasks=1

Data-local map tasks=29

Map-Reduce Framework

Map input records=1586

Map output records=24

Bytes Written=437

16/11/29 13:21:10 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

16/11/29 13:21:10 WARN mapreduce.JobSubmitter: No job jar file set.  User classes may not be found. See Job or Job#setJar(String).

16/11/29 13:21:10 INFO input.FileInputFormat: Total input paths to process : 1

16/11/29 13:21:12 INFO mapreduce.JobSubmitter: number of splits:1

16/11/29 13:21:13 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1480434980067_0002

16/11/29 13:21:13 INFO mapred.YARNRunner: Job jar is not present. Not adding any jar to the list of resources.

16/11/29 13:21:14 INFO impl.YarnClientImpl: Submitted application application_1480434980067_0002

16/11/29 13:21:14 INFO mapreduce.Job: The url to track the job: http://e34a63e1dcf8:8088/proxy/application_1480434980067_0002/

16/11/29 13:21:14 INFO mapreduce.Job: Running job: job_1480434980067_0002

16/11/29 13:21:48 INFO mapreduce.Job: Job job_1480434980067_0002 running in uber mode : false

16/11/29 13:21:48 INFO mapreduce.Job:  map 0% reduce 0%

16/11/29 13:22:12 INFO mapreduce.Job:  map 100% reduce 0%

16/11/29 13:22:37 INFO mapreduce.Job:  map 100% reduce 100%

16/11/29 13:22:38 INFO mapreduce.Job: Job job_1480434980067_0002 completed successfully

16/11/29 13:22:38 INFO mapreduce.Job: Counters: 49

Job Counters

Launched map tasks=1

Launched reduce tasks=1

Data-local map tasks=1

Map-Reduce Framework

Map input records=11

Map output records=11

Map output bytes=263

Map output materialized bytes=291

Input split bytes=132

Physical memory (bytes) snapshot=334082048

Virtual memory (bytes) snapshot=1297162240

Total committed heap usage (bytes)=209518592

File Input Format Counters

Bytes Read=437

File Output Format Counters

Bytes Written=197

bash-4.1#

Verifique la salida.

bash-4.1# bin/hdfs dfs -cat output/*

6             dfs.audit.logger

4             dfs.class

3             dfs.server.namenode.

2             dfs.period

2             dfs.audit.log.maxfilesize

2             dfs.audit.log.maxbackupindex

1             dfsmetrics.log

1             dfsadmin

1             dfs.servers

1             dfs.replication

1             dfs.file

bash-4.1#

Conclusión

Ejecutamos con éxito un clúster de hadoop de un solo nodo usando Docker. Como vio, no tuvimos que hacer nada para configurar el clúster hadoop, y en poco tiempo teníamos un clúster hadoop en funcionamiento. Como se mencionó anteriormente, Docker se usa principalmente para probar entornos, por lo que si desea probar una aplicación hadoop, configurar el clúster de hadoop en un contenedor de docker y probar la aplicación de hadoop es la forma más fácil y rápida.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar