Instalación y Configuración de Apache Ambari, administrar y monitorear Cluster Apache Hadoop

Instalación y Configuración de Apache Ambari, administrar y monitorear Cluster Apache Hadoop

Bajo la licencia de la Apache Foundation, Apache Ambari, nació con el objetivo de simplificar la gestión de Hadoop desarrollando software para aprovisionar, administrar y monitorear los clústeres de Apache Hadoop. Ambari proporciona una interfaz de usuario web de administración de Hadoop muy intuitiva y fácil de usar respaldada por sus API RESTful.

Ambari Dashboard

Ambari nos va a permitir realizar, por ejemplo, las siguientes acciones:

  • Provisión de un clúster de Hadoop

    • Ambari proporciona un asistente (paso a paso) para instalar servicios de Hadoop en cualquier tipología o número de hosts.
    • Ambari maneja la configuración de los servicios de Hadoop automatizando el aprovionamiento del clúster.
  • Administrar un clúster de Hadoop

    • Ambari proporciona una administración central para iniciar, detener y reconfigurar los servicios de Hadoop en todo el cluster.
  • Monitorear un clúster de Hadoop

    • Ambari proporciona un panel de control para monitorear la salud y el estado del clúster de Hadoop.
    • Ambari aprovecha Ambari Metrics System para la recolección de las principales métricas.
    • Ambari aprovecha Ambari Alert Framework para alertar al sistema y le notificará cuando necesite su atención.

Realmente, Ambari, es una más que interesante herramienta que casi podríamos considerarla como un DataOps sin serlo al 100%. Aunque tiene la posibilidad de poder gestionar muchas herramientas que nos van a permitir poder hacer una gestión integral de una infraestructura grande de datos.

Para poder arrancar rápidamente con Ambari una recomendación es poder usar la Sandbox de Hortonworks. Tendremos tres posibilidades, sea mediante una imagen para VirtualBox, para VMware o mediante un contenedor Docker. En nuestro caso hemos escogido Docker, a continuación, detallaremos los pasos realizados para poder tener un Cluster Single Node de Hadoop con Ambari Server configurado.

NOTA: Nuestra recomendación es que miréis de tener Docker libre de contenedores ya que es tal el uso de puertos que tendremos que activar que, con toda probabilidad, más de la mitad estarán ocupados. Dedicaremos este Stack Docker solo para el uso de este contenedor, sin tener en cuenta los recursos que va a necesitar físicos.

Download Sandbox Hortonworks for Docker

Para ello deberemos descargarnos la imagen para Docker de su web:

wget https://downloads-hortonworks.akamaized.net/sandbox-hdp-2.6.1/HDP_2_6_1_docker_image_28_07_2017_14_42_40.tar

NOTA: Esta imagen tiene un tamaño aproximado de 12Gb, hay que pensar que deberemos tener bastante espacio ya que, en un primer término serán los 12Gb del fichero .tar, luego seran otros tantos para la conversión a imagen docker y, cuando se arranque el contenedor, otros tantos para el contenedor activo con la imagen cargada.

Importar Sandbox en Docker

Una vez descargada la imagen .tar deberemos proceder con el load en Docker:

docker load -i HDP_2_6_1_docker_image_28_07_2017_14_42_40.tar

Este es un proceso largo pero, una vez finalizado, la podremos ver haciendo un docker images.

Arrancar el contenedor Docker con Ambari

Para facilitar el arranque del contenedor Docker, los compañeros de Hortonworks han preparado un script que podéis localizar aquí. Si bien es cierto, hemos mirado de retocarlo un poco para que sea todavía más simple:

#!/bin/bash
echo "Waiting for docker daemon to start up:"
until docker ps 2>&1| grep STATUS>/dev/null; do  sleep 1; done;  >/dev/null
docker ps -a | grep sandbox-hdp
if [ $? -eq 0 ]; then
 docker start sandbox-hdp
else
docker run --name sandbox-hdp --hostname "sandbox.hortonworks.com" --privileged -d \
-p 1111:111 \
-p 1000:1000 \
-p 1100:1100 \
-p 1220:1220 \
-p 1988:1988 \
-p 2049:2049 \
-p 2100:2100 \
-p 2181:2181 \
-p 3000:3000 \
-p 4040:4040 \
-p 4200:4200 \
-p 4242:4242 \
-p 5007:5007 \
-p 5011:5011 \
-p 6001:6001 \
-p 6003:6003 \
-p 6008:6008 \
-p 6080:6080 \
-p 6188:6188 \
-p 8000:8000 \
-p 8005:8005 \
-p 8020:8020 \
-p 8032:8032 \
-p 8040:8040 \
-p 8042:8042 \
-p 8080:8080 \
-p 8082:8082 \
-p 8086:8086 \
-p 8088:8088 \
-p 8090:8090 \
-p 8091:8091 \
-p 8188:8188 \
-p 8443:8443 \
-p 8744:8744 \
-p 8765:8765 \
-p 8886:8886 \
-p 8888:8888 \
-p 8889:8889 \
-p 8983:8983 \
-p 8993:8993 \
-p 9000:9000 \
-p 9995:9995 \
-p 9996:9996 \
-p 10000:10000 \
-p 10001:10001 \
-p 10015:10015 \
-p 10016:10016 \
-p 10500:10500 \
-p 10502:10502 \
-p 11000:11000 \
-p 15000:15000 \
-p 15002:15002 \
-p 16000:16000 \
-p 16010:16010 \
-p 16020:16020 \
-p 16030:16030 \
-p 18080:18080 \
-p 18081:18081 \
-p 19888:19888 \
-p 21000:21000 \
-p 33553:33553 \
-p 39419:39419 \
-p 42111:42111 \
-p 50070:50070 \
-p 50075:50075 \
-p 50079:50079 \
-p 50095:50095 \
-p 50111:50111 \
-p 60000:60000 \
-p 60080:60080 \
-p 15500:15500 \
-p 15501:15501 \
-p 15502:15502 \
-p 15503:15503 \
-p 15504:15504 \
-p 15505:15505 \
-p 2222:22 \
sandbox-hdp /usr/sbin/sshd -D
fi

docker exec -t sandbox-hdp /bin/sh -c 'chown -R mysql:mysql /var/lib/mysql'
docker exec -d sandbox-hdp service mysqld start
docker exec -d sandbox-hdp service postgresql start
docker exec -t sandbox-hdp ambari-server start
docker exec -t sandbox-hdp ambari-agent start
docker exec -t sandbox-hdp /bin/sh -c 'rm -f /usr/hdp/current/oozie-server/libext/falcon-oozie-el-extension-0.10.0.2.6.1.0-129.jar'
docker exec -t sandbox-hdp /bin/sh -c 'chown -R hdfs:hadoop /hadoop/hdfs'

echo "Waiting for ambari agent to connect"
docker exec -t sandbox-hdp /bin/sh -c ' until curl --silent -u admin:4o12t0n -H "X-Requested-By:ambari" -i -X GET  http://localhost:8080/api/v1/clusters/Sandbox/hosts/sandbox.hortonworks.com/host_components/ZOOKEEPER_SERVER | grep state | grep -v desired | grep INSTALLED; do sleep 5; echo -n .; done;'

echo "Waiting for ambari services to start "
docker exec -t sandbox-hdp /bin/sh -c 'until curl --silent --user admin:4o12t0n -X PUT -H "X-Requested-By: ambari"  -d "{\"RequestInfo\":{\"context\":\"_PARSE_.START.HDFS\",\"operation_level\":{\"level\":\"SERVICE\",\"cluster_name\":\"Sandbox\",\"service_name\":\"HDFS\"}},\"Body\":{\"ServiceInfo\":{\"state\":\"STARTED\"}}}" http://localhost:8080/api/v1/clusters/Sandbox/services/HDFS | grep -i accept >/dev/null; do echo -n .; sleep 5; done;'

docker exec -t sandbox-hdp /bin/sh -c 'until curl --silent --user admin:4o12t0n -X PUT -H "X-Requested-By: ambari"  -d "{\"RequestInfo\":{\"context\":\"_PARSE_.START.ALL_SERVICES\",\"operation_level\":{\"level\":\"CLUSTER\",\"cluster_name\":\"Sandbox\"}},\"Body\":{\"ServiceInfo\":{\"state\":\"STARTED\"}}}" http://localhost:8080/api/v1/clusters/Sandbox/services | grep -i accept > /dev/null; do sleep 5; echo -n .; done; '

docker exec -t sandbox-hdp /bin/sh -c 'until /usr/bin/curl --silent --user admin:4o12t0n -H "X-Requested-By: ambari" "http://localhost:8080/api/v1/clusters/Sandbox/requests?to=end&page_size=10&fields=Requests" | tail -n 27 | grep COMPLETED | grep COMPLETED > /dev/null; do echo -n .; sleep 1; done;'

docker exec -t sandbox-hdp su - hue -c '/bin/bash /usr/lib/tutorials/tutorials_app/run/run.sh &>/dev/null'
docker exec -t sandbox-hdp su - hue -c '/bin/bash /usr/lib/hue/tools/start_scripts/update-tutorials.sh &>/dev/null'
docker exec -t sandbox-hdp touch /usr/hdp/current/oozie-server/oozie-server/work/Catalina/localhost/oozie/SESSIONS.ser
docker exec -t sandbox-hdp chown oozie:hadoop /usr/hdp/current/oozie-server/oozie-server/work/Catalina/localhost/oozie/SESSIONS.ser
docker exec -d sandbox-hdp /etc/init.d/tutorials start
docker exec -d sandbox-hdp /etc/init.d/splash
docker exec -d sandbox-hdp /etc/init.d/shellinaboxd start

NOTA: Comentaros que según tengáis la conexión de los contenedores Docker, quizás las URL que aparecen con http://localhost no funcionen, tendréis entonces, en el navegador, de cambiarlo por vuestra IP del contenedor. No en el script ya que el contenedor de forma interna si lo va a poder resolver.

Jugando con Ambari

Una vez tengamos el contenedor con la imagen ya en marcha, podremos dirigirnos mediante un navegador a la URL siguiente: http://IP-HOST-DOCKER:8080/. Nos pedirá un usuario y un password: admin/4o12t0n. Este está justo dentro de los parámetros de configuración del anterior script. Podéis modificarlo sin problema dentro de Ambari en sus opciones de management.

Tened un poco de paciencia ya que los servicios que forma el Cluster tardan en arrancar, en la primera pantalla podréis ver rápidamente su Estado e ir siguiendo la progresión del arranque y en caso que alguno falle, tendréis una alarma en la barra superior de menú.

Nuestra recomendación es que miréis de desactivar aquellos servicios que no váis a utilizar, para mejorar el rendimiento y por seguridad. Podéis ir modificando el script a vuestro antojo e ir acotando los puertos que realmente si necesitéis.

Autor: Joakim Vivas

comments powered by Disqus