Añadir y retirar DataNodes/NodeManagers
Iniciar a partir de la tercera imagen y la tercera plantilla una nueva MV, llamada datanode3
- Comprobar su IP y añadirla al fichero /etc/hosts de las otras MVs
Creación de ficheros include/exclude
Aunque no es estrictamente necesario para añadir o retirar nodos del cluster, es conveniente tener una lista en la que podamos indicar los nodos que se pueden añadir o retirar del cluster. Para ello, haced lo siguiente en el NameNode (como usuario hdmaster):
- Parad los demonios
- Crear cuatro ficheros: $HADOOP_PREFIX/etc/hadoop/dfs.include, $HADOOP_PREFIX/etc/hadoop/dfs.exclude, $HADOOP_PREFIX/etc/hadoop/yarn.include y $HADOOP_PREFIX/etc/hadoop/yarn.exclude (inicialmente vacíos)
- En los fichero dfs.include y yarn.include, poned los nombres de todos los DataNodes/NodeManagers que querramos que estén en el cluster . Dejad los ficheros dfs.exclude y yarn.exclude vacíos.
- En el fichero de configuración hdfs-site.xml, añadid dos propiedades:
- dfs.hosts: nombre de un fichero con lista de hosts que pueden actuar como DataNodes; si el fichero está vacío, cualquier nodo están permitido. Darle como valor, el path al fichero dfs.include
- dfs.hosts.exclude: nombre de un fichero con lista de hosts que no pueden actuar como DataNodes; si el fichero está vacío, ninguno está excluido. Darle como valor, el path al fichero dfs.exclude
- En el fichero yarn-site.xml, añadid dos propiedades:
- yarn.resourcemanager.nodes.include-path: nombre de un fichero con lista de hosts que pueden actuar como NodeManagers; si el fichero está vacío, cualquier nodo están permitido. Darle como valor, el path al fichero yarn.include
- yarn.resourcemanager.nodes.exclude-path: nombre de un fichero con lista de hosts que no pueden actuar como NodeManagers; si el fichero está vacío, ninguno está excluido. Darle como valor, el path al fichero yarn.exclude
- Reiniciad los demonios.
Añadir un datanode/nodemanager
Vamos a añadir un nuevo nodo al clusterl:
- En el Namenode, añadir el nombre de nuevo nodo (datanode3) en los ficheros dfs-include y yarn-include
- Actualizar el NameNode con los nuevos DataNodes ejecutando:
- hdfs dfsadmin -refreshNodes
- Actualizar el JobTracker con los nuevos TaskTrackers ejecutando:
- yarn rmadmin -refreshNodes
- Comprobad en el interfaz web del NameNode, que este nuevo nodo aparece como Dead
- Iniciar un nuevo nodo (datanode3) como el resto de nodos del cluster (con lo que tendrá ya Hadoop instalado), y modifica los ficheros /etc/hosts de todos los nodos para incluirlo
- Conectarse por ssh al nuevo nodo e iniciar manualmente los demonios del datanode/jobtracker en el nuevo nodo (como usuario hdmaster)
- $HADOOP_PREFIX/sbin/hadoop-daemon.sh start datanode
- $HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager
El nodo contacta automáticamente con el Namenode y se unirá al cluster
- Usa (en el NameNode) los comandos hdfs dfsadmin -report y yarn node -list para combrobar que el nuevo nodo se ha añadido. Puedes comprobarlo también el interfaz web del NameNode y de YARN.
El nuevo nodo, inicialmente está vacío (no tiene datos de HDFS), con lo que el cluster estará desbalanceado. Se puede forzar el balanceo ejecutando, en el NameNode:
- hdfs balancer
Para más información, ver https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#balancer
Retirar un DataNode
En principio, el apagado de un DataNode no debería afectar al cluster. Sin embargo, si queremos hacer un apagado programado de un DataNode es preferible advertir al NameNode previamente. Para eliminar un DataNode puedes seguir los siguientes pasos:
Pasos:
- Poned el nombre del nodo o nodos que queremos retirar en los fichero dfs-exclude y yarn-exclude y ejecutar
- hdfs dfsadmin -refreshNodes
- yarn rmadmin -refreshNodes
- Comprobad que al cabo de un rato, en el interfaz web o mediante los comandos los comandos hdfs dfsadmin -report y yarn node -list, que el/los nodo(s) excluido(s) aparece(n) que está(n) Decomissioned en HDFS y YARN
ya podríamos parar los demonios en el nodo decomisionado y apagarlo. Si no queremos volver a incluirlo en el cluster:
- Eliminar el/los nodo(s) de los ficheros include y exclude y ejecutar otra vez
- hdfs dfsadmin -refreshNodes
- yarn rmadmin -refreshNodes
- Eliminar el/los nodo(s) del fichero slaves