Preguntas que deben hacerse en la dirección de entrevistar big data: proceso de lectura y escritura de HDFS

Proceso de lectura y escritura de HDFS

Esta es una pregunta indispensable para entrevistar a analistas de big data. Muchos entrevistadores no pueden hablar completamente
, así que por favor recuérdalo. Y muchos problemas se derivan del proceso de lectura y escritura de HDFS.

1. Proceso de lectura de HDFS

  1. El cliente envía una solicitud RPC a NameNode. La ubicación del bloque de archivo solicitado;
  2. Después de que NameNode reciba la solicitud, verificará los permisos de usuario y si existe este archivo. Si están todos en línea
    , devolverá parte o la totalidad de la lista de bloqueo según la situación. Para cada bloque, NameNode
    devolverá la dirección del DataNode que contiene la copia del bloque; la dirección del DataNode,
    la distancia entre el DataNode y el cliente se obtendrán según la topología del clúster, y luego se ordenarán según
    dos reglas: en la topología de red, el más cercano al Cliente se clasifica en primer lugar; en el mecanismo de latido,
    el estado del DataNode informado en horas extras es STALE, dicha fila está detrás;
  3. El cliente selecciona el Nodo de datos mejor clasificado para leer el bloque. Si el cliente en sí es
    un Nodo de datos, obtendrá datos directamente del local (función de lectura de cortocircuito);
  4. La esencia de la capa inferior es establecer un flujo de socket (FSDataInputStream) y llamar repetidamente
    al método de lectura de la clase principal DataInputStream hasta que se lean los datos en este bloque;
  5. Después de leer los bloques en la lista, si la lectura del archivo aún no ha terminado, el cliente continuará obteniendo
    el siguiente lote de listas de bloques del NameNode;
  6. Después de leer un bloque, se realizará la verificación de la suma de verificación.Si ocurre un error al leer el DataNode,
    el cliente notificará al NameNode y luego
    continuará leyendo desde el siguiente DataNode que tenga una copia del bloque;
  7. El método de lectura lee la información del bloque en paralelo, no uno por uno, el NameNode solo
    devuelve la dirección del DataNode del bloque solicitado por el Cliente, no los datos del bloque solicitado;
  8. Finalmente, todos los bloques leídos se fusionarán en un archivo final completo;
    inserte la descripción de la imagen aquí

2. Proceso de escritura HDFS

  1. Cliente El cliente envía una solicitud de carga y establece comunicación con el NameNode a través de RPC. El NameNode
    verifica si el usuario tiene el permiso de carga y si el archivo cargado tiene el mismo nombre en el directorio HDFS correspondiente
    . Si alguno de los dos no se cumple, se informará directamente un error. , si ambos están satisfechos,
    devolver al cliente un mensaje que se puede cargar;
  2. El cliente divide el archivo de acuerdo con el tamaño del archivo. El valor predeterminado es 128 M. Una vez que se completa la división, envía
    una solicitud al NameNode en el servidor en el que se carga el primer bloque;
  3. Después de que NameNode recibe la solicitud, asigna archivos de acuerdo con la topología de la red, la percepción del rack y el mecanismo de copia
    , y devuelve la dirección del DataNode disponible;
  4. Después de recibir la dirección, el cliente se comunica con un nodo en la lista de direcciones del servidor como A, que es esencialmente una
    llamada RPC para establecer una canalización. A continuará llamando a B después de recibir la solicitud, y B
    llamará a C para completar la establecimiento de todo el pipeline. , regreso al Cliente paso a paso;
  5. El cliente comienza a enviar el primer bloque a A (primero lee los datos del disco y luego los coloca en la memoria
    caché local), en la unidad de paquete (paquete de datos, 64kb), A recibe un paquete y lo envía a
    B, y luego B envía Para C, A lo pondrá en una cola de respuesta para esperar la respuesta después de que se transmita cada paquete;
  6. Los datos se dividen en paquetes individuales y se transmiten secuencialmente en la canalización.En la
    transmisión inversa de la canalización, los acuses de recibo se envían uno por uno (respuesta correcta del comando) y, finalmente, el primer
    nodo A de DataNode en la canalización envía el acuse de recibo de la canalización al Cliente;
  7. Una vez que se completa la transmisión de un bloque, el Cliente solicita al NameNode que cargue el segundo bloque nuevamente, y
    el NameNode selecciona tres DataNodes para el Cliente nuevamente.

Supongo que te gusta

Origin blog.csdn.net/m0_58353740/article/details/131353868
Recomendado
Clasificación