2012-02-06 16 views
7

Supongamos que uno está utilizando el tamaño de bloque predeterminado (128 MB), y hay un archivo que usa 130 MB; entonces usando un bloque de tamaño completo y un bloque con 2 MB. Entonces se deben agregar 20 MB al archivo (el total debería ser ahora de 150 MB). ¿Lo que pasa?¿Cómo funciona HDFS con append?

¿El HDFS realmente cambia el tamaño del último bloque de 2MB a 22MB? ¿O crear un nuevo bloque?

¿Cómo se relaciona un archivo en HDFS con la conccurecia? ¿Hay riesgo de dataloss?

Hace HDFS crear un tercer bloque poner los 20 + 2 MB en él, y eliminar el bloque con 2MB. Si es así, ¿cómo funciona esto al mismo tiempo?

Respuesta

3

De acuerdo con la latest design document en el Jira issuementioned before, nos encontramos con las siguientes respuestas a su pregunta:

  1. HDFS se anexar a el último bloque, no crear un nuevo bloque y copiar los datos de el último bloque anterior Esto no es difícil porque HDFS simplemente usa un sistema de archivos normal para escribir estos archivos de bloque como archivos normales. Los sistemas de archivos normales tienen mecanismos para agregar nuevos datos. Por supuesto, si llena el último bloque, creará un nuevo bloque.
  2. Solo se permite una sola escritura o adición a cualquier archivo al mismo tiempo en HDFS, por lo que no hay concurrencia para manejar. Esto es administrado por el namenode. Debe cerrar un archivo si desea que alguien más lo escriba.
  3. Si el último bloque en un archivo no se replica, el apéndice fallará. El apéndice se escribe en una única réplica, que lo canaliza a las réplicas, de forma similar a una escritura normal. Me parece que no hay riesgo adicional de dataloss en comparación con una escritura normal.
+0

¿Se puede agregar a un archivo cerrado? – David

+0

si llamas a append en un archivo que estás abriendo. no puedes llamar anexar en un archivo abierto. luego, una vez que llamas a append y obtienes un flujo de salida, puedes comenzar a descargar tus bytes al final del archivo. – EthanP

+0

Si recuerdo correctamente cuando se introdujo esta característica, necesitaría dejar abierto un archivo recién creado para poder "agregarlo" (también conocido como un apéndice no real). ¿Estás diciendo que ahora HDFS permite 1) crear un archivo 2) Cerrarlo 3) Volver a abrirlo 4) Añadir datos a él? – David

1

Hadoop Distributed File System admite agrega archivos, y en este caso debe agregar los 20 MB al segundo bloque en su ejemplo (el que tiene inicialmente 2 MB). De esa forma terminarás con dos bloques, uno con 128 MB y otro con 22 MB.

This es la referencia a la adición de documentos Java para HDFS.

+4

Entiendo que el camino sigue siendo el mismo. Pero como los bloques son de escritura única, me imagino que HDFS crearía un tercer bloque y pondría los 20 +2 MB en él, y eliminaría el bloque con 2MB. Pero, ¿cómo funciona esto al mismo tiempo? – David

3

Aquí hay un design document muy completo sobre anexar y contiene problemas de simultaneidad.

Actual HDFS docs da un enlace a ese documento, por lo que podemos suponer que es el más reciente. (Fecha del documento es 2009)

Y el relacionado issue.