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:
-
- El cliente de Docker se puso en contacto con el demonio de Docker.
-
- El demonio de Docker extrajo la imagen «hello-world» del Docker Hub.
-
- 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.
-
- 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.