2011-10-03 23 views
14

Cuando estoy cargando un archivo a HDFS, si configuro el factor de replicación en 1, ¿las divisiones de archivos van a residir en una sola máquina o las divisiones se distribuirán en varias máquinas a través de la red?Factor de replicación de HDFS

hadoop fs -D dfs.replication=1 -copyFromLocal file.txt /user/ablimit 

Respuesta

11

De acuerdo con la Hadoop : Definitive Guide

estrategia por defecto de Hadoop es colocar la primera réplica en el mismo nodo que el cliente (por clientes que ejecutan fuera del clúster, un nodo se elige al azar, aunque el sistema intenta no seleccionar los nodos que están demasiado llenos o demasiado ocupados). La segunda réplica se coloca en un rack diferente del primero (fuera de rack), elegido al azar. La tercera réplica se coloca en el el mismo bastidor que el segundo, pero en un nodo diferente elegido al azar. Las réplicas adicionales se colocan en nodos aleatorios en el clúster, aunque el sistema intenta evitar colocar demasiadas réplicas en el mismo bastidor.

Esta lógica tiene sentido ya que disminuye la vibración de red entre los diferentes nodos. Pero, el libro se publicó en 2009 y hubo muchos cambios en el marco de Hadoop.

Creo que depende de si el cliente es igual que un nodo de Hadoop o no. Si el cliente es un nodo Hadoop, todas las divisiones estarán en el mismo nodo. Esto no proporciona un rendimiento de lectura/escritura mejor a pesar de tener múltiples nodos en el clúster. Si el cliente no es el mismo que el nodo Hadoop, entonces el nodo se elige al azar para cada división, por lo que las divisiones se reparten entre los nodos de un clúster. Ahora, esto proporciona un mejor rendimiento de lectura/escritura.

Una de las ventajas de escribir en nodos múltiples es que incluso si uno de los nodos se cae, un par de divisiones pueden estar caídas, pero al menos algunos datos pueden recuperarse de alguna manera de las divisiones restantes.

+0

Creo que su última declaración no es correcta. Si uno de los nodos está inactivo y tiene bloques de datos de entrada, no hay forma de que NameNode recupere el archivo o incluso distribuya los bloques restantes (suponiendo que el factor de replicación sea 1) –

+0

#borin storm, tiene toda la razón. –

+0

Bloque lugar la elección de la estrategia está documentado de manera diferente en los documentos de Hadoop, compruebe https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Replica_Placement:_The_First_Baby_Steps. –

1

Si configura la replicación como 1, el archivo solo estará presente en el nodo del cliente, es decir, el nodo desde el que está cargando el archivo.

+1

Esto es cierto _iff_ el nodo del cliente también ejecuta un servicio DataNode. –

+0

¿Es esto cierto incluso si el nodo de datos local del cliente está lleno? es decir, ¿fallará la copia en lugar de usar un DN diferente? – Wheezil

0
  • Si su clúster es de nodo único, al cargar un archivo se derramará de acuerdo con el tamaño del bloque y permanecerá en una sola máquina.
  • Si el clúster es el nodo Multi luego, cuando se carga un archivo que se va a dividir de acuerdo con el tamaño del bloque y que se distribuirán a los diferentes DataNode en el clúster a través de oleoductos y NameNode decidirá en que los datos deben ser movidos en el clúster.

El factor de replicación HDFS se utiliza para hacer una copia de los datos (es decir, si el factor de duplicación es 2, todos los datos que cargue en HDFS tendrán una copia).

+0

¿Qué ocurre si cambia el valor del factor de replicación en hdfs-site?xml después de cargar un archivo a hdfs: ¿el sistema lo replicará automáticamente o necesitaría ejecutar un comando hdfs balanceador? –