hadoop - recuperarlos - Cómo reparar archivos corruptos HDFS
reparar archivos dañados pdf (4)
Puedes usar
hdfs fsck /
para determinar qué archivos están teniendo problemas. Mire a través de la salida si hay bloques faltantes o corruptos (ignore los bloques que no se han replicado por ahora). Este comando es realmente detallado, especialmente en un gran sistema de archivos HDFS, así que normalmente me pongo a trabajar con el resultado significativo con
hdfs fsck / | egrep -v ''^/.+$'' | grep -v eplica
que ignora las líneas con nada más que puntos y líneas que hablan sobre la replicación.
Una vez que encuentras un archivo que está dañado
hdfs fsck /path/to/corrupt/file -locations -blocks -files
Use esa salida para determinar dónde podrían vivir los bloques. Si el archivo es más grande que tu tamaño de bloque, puede tener varios bloques.
Puede usar los números de bloque informados para ir a los nodos de datos y los registros de namenode en busca de la máquina o máquinas en las que vivían los bloques. Intente buscar errores del sistema de archivos en esas máquinas. Faltan puntos de montaje, nodo de datos no se está ejecutando, sistema de archivos reformateado / reaprovisionado. Si puede encontrar un problema de esa manera y poner de nuevo en línea el bloque, ese archivo volverá a estar en buen estado.
Enjaguar y enjuague hasta que todos los archivos estén sanos o agote todas las alternativas buscando los bloques.
Una vez que determine qué sucedió y no puede recuperar más bloques, solo use el
hdfs fs -rm /path/to/file/with/permanently/missing/blocks
ordene que su sistema de archivos HDFS vuelva a ser saludable para que pueda comenzar a rastrear nuevos errores a medida que ocurren.
¿Cómo alguien corrige un HDFS que está dañado? Busqué en el sitio web Apache / Hadoop y decía su comando fsck
, que no lo soluciona. Con suerte, alguien que haya tenido este problema antes puede decirme cómo solucionarlo.
A diferencia de una utilidad fsck tradicional para sistemas de archivos nativos, este comando no corrige los errores que detecta. Normalmente NameNode corrige automáticamente la mayoría de las fallas recuperables.
Cuando ejecuté bin/hadoop fsck / -delete
, enumeré los archivos que estaban corruptos o faltaban bloques. ¿Cómo puedo hacer que no se corrompa? Esto está en una máquina de práctica así que PODRÍA volar todo, pero cuando salgamos al aire, no podré "arreglarlo" volando todo, así que estoy tratando de resolverlo ahora.
Si solo quiere que su HDFS vuelva al estado normal y no se preocupe demasiado por los datos, entonces
Esto mostrará una lista de los bloques HDFS corruptos:
hdfs fsck -list-corruptfileblocks
Esto eliminará los bloques HDFS dañados:
hdfs fsck / -delete
Tenga en cuenta que, puede que tenga que usar sudo -u hdfs
si no es el usuario sudo (suponiendo que "hdfs" es el nombre del usuario sudo)
inicie todos los daemons y ejecute el comando como "hadoop namenode -recover -force" detenga los daemons y comience nuevamente. Espere un momento para recuperar los datos.
la solución aquí funcionó para mí: https://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html
su - <$hdfs_user>
bash-4.1$ hdfs fsck / | grep ''Under replicated'' | awk -F'':'' ''{print $1}'' >> /tmp/under_replicated_files
-bash-4.1$ for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ; hadoop fs -setrep 3 $hdfsfile; done