tutorial multinodo maquina instalar for español dummies como cluster hadoop

multinodo - ¿Cómo elimino correctamente los nodos en Hadoop?



instalar cluster hadoop (3)

Debe tener en cuenta que dado que para que Hadoop se desempeñe bien, realmente desea tener los datos disponibles en varias copias. Al eliminar los nodos, elimina las posibilidades de que los datos estén disponibles de manera óptima, y ​​hace un esfuerzo adicional en el clúster para garantizar la disponibilidad.

Es decir, al eliminar un nodo, debe asegurarse de que se realice una copia adicional de todos sus datos en otro lugar. Por lo tanto, no debería hacer esto solo por diversión, a menos que use un paradigma de administración de datos diferente al de la configuración predeterminada (= mantenga 3 copias en el clúster).

Y para que un clúster de Hadoop funcione bien, usted querrá almacenar los datos en el clúster. De lo contrario, realmente no puede mover el cálculo a los datos, porque los datos todavía no están allí. Gran parte de Hadoop se trata de tener "unidades inteligentes" que pueden realizar cálculos antes de enviar los datos a través de la red.

Por lo tanto, para que esto sea razonable, es probable que tenga que dividir de alguna manera su grupo. Haga que un conjunto de nodos conserve las 3 copias maestras de los datos originales y tenga algunos nodos "complementarios" que solo se usan para almacenar datos intermedios y realizar cálculos en esa parte. Nunca cambie los nodos maestros, por lo que no es necesario que redistribuyan sus datos. ¿Desea apagar los nodos complementarios solo cuando están vacíos? Pero eso probablemente todavía no está implementado.

Estoy ejecutando Hadoop 1.1.2 en un clúster con más de 10 máquinas. Me gustaría escalar hacia arriba y hacia abajo, tanto para HDFS como para MapReduce. Por "bien", quiero decir que requiero que no se pierdan los datos (permitir que los nodos HDFS se desconecten), y que los nodos ejecuten una tarea antes de apagarse.

Me he dado cuenta de que el proceso de datanode muere una vez que finaliza la puesta en marcha, lo cual es bueno. Esto es lo que hago para eliminar un nodo:

  • Añadir nodo a mapred.exclude
  • Añadir nodo a hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh stop tasktracker

Para volver a agregar el nodo (asumiendo que se eliminó como arriba), esto es lo que estoy haciendo.

  • Eliminar de mapred.exclude
  • Eliminar de hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh start tasktracker
  • $ hadoop-daemon.sh start datanode

¿Es esta la forma correcta de escalar hacia arriba y hacia abajo "bien"? Al reducir la escala, me doy cuenta de que la duración del trabajo aumenta considerablemente para ciertos trabajos desafortunados (ya que las tareas que se estaban ejecutando en el nodo eliminado deben volver a programarse).


Mientras se retira la puesta en marcha, los archivos temporales o de preparación se limpian automáticamente. Estos archivos faltan ahora y hadoop no reconoce cómo desapareció. Por lo tanto, el proceso de desmantelamiento sigue esperando hasta que se resuelva, a pesar de que el desmantelamiento real se realiza para todos los demás archivos.

En la GUI de Hadoop: si observa que el parámetro "Número de bloques subrepetidos" no se reduce a lo largo del tiempo o es casi constante, este es el motivo.

Así que haz una lista de los archivos usando el siguiente comando

hadoop fsck / -files -blocks -racks

Si ve que esos archivos son temporales y no son necesarios, elimine esos archivos o carpetas

Ejemplo: hadoop fs -rmr /var/local/hadoop/hadoop/.staging/* (indique la ruta correcta aquí)

Esto resolvería el problema de inmediato. Los nodos sin comisionar se moverán a los nodos muertos en 5 minutos.


Si no ha configurado el archivo de exclusión de dfs anteriormente, siga 1-3. De lo contrario, empezar desde 4.

  1. Apague el NameNode.
  2. Establezca dfs.hosts.exclude para que apunte a un archivo de exclusión vacío.
  3. Reinicie NameNode.
  4. En el archivo de exclusión de dfs, especifique los nodos con el nombre de host completo o IP o IP: formato de puerto.
  5. Haz lo mismo en mapred.exclude
  6. ejecute bin/hadoop dfsadmin -refreshNodes . Esto obliga a NameNode a volver a leer el archivo de exclusión e iniciar el proceso de retiro.
  7. ejecute bin/hadoop mradmin -refreshNodes
  8. Supervise la interfaz de usuario web NameNode y JobTracker y confirme que el proceso de retiro está en curso. Puede tardar unos segundos en actualizarse. Los mensajes como "Decommission complete for node XXXX.XXXX.X.XX:XXXXX" aparecerán en los archivos de registro de NameNode cuando finalice el retiro de servicio, momento en el que podrá eliminar los nodos del clúster.
  9. Cuando el proceso se haya completado, la IU de namenode mostrará el datanode como dado de baja. La página Jobtracker mostrará el número actualizado de nodos activos. Ejecute bin/hadoop dfsadmin -report para verificar. Detenga el proceso de datanode y tasktracker en los nodos excluidos.
  10. Si no piensa reintroducir la máquina en el clúster, elimínela de los archivos de inclusión y exclusión.

Para agregar un nodo como datanode y tasktracker, consulte la página de preguntas frecuentes de Hadoop

EDITAR: Cuando se debe eliminar un nodo activo del clúster, ¿qué sucede con el trabajo?

Los trabajos que se ejecutan en un nodo que se quitará de servicio se verían afectados, ya que las tareas del trabajo programado en ese (s) nodo (s) se marcarían como KILLED_UNCLEAN (para tareas de asignación y reducción) o KILLED (para tareas de configuración y limpieza de trabajos). Vea la línea 4633 en JobTracker.java para más detalles. El trabajo será informado para fallar esa tarea. La mayoría de las veces, Job Tracker reprogramará la ejecución. Sin embargo, después de muchos fallos repetidos, en su lugar puede decidir permitir que todo el trabajo falle o tenga éxito. Vea la línea 2957 en adelante en JobInProgress.java .