Perguntas que devem ser feitas na direção da entrevista de big data: processo de leitura e gravação do HDFS

Processo de leitura e gravação do HDFS

Esta pergunta é indispensável para entrevistar analistas de big data. Muitos entrevistadores não podem falar completamente
, então, por favor, lembre-se disso. E muitos problemas são derivados do processo de leitura e gravação do HDFS.

1. Processo de leitura HDFS

  1. O cliente envia a solicitação RPC para NameNode. A localização do bloco de arquivo solicitado;
  2. Após o NameNode receber a requisição, ele irá verificar as permissões do usuário e se existe este arquivo. Se estiverem todos alinhados
    , ele retornará parte ou toda a lista de bloqueios de acordo com a situação. Para cada bloco, o NameNode
    retornará o endereço do DataNode que contém a cópia do bloco; O endereço do DataNode,
    a distância entre o DataNode e o cliente será obtido de acordo com a topologia do cluster, e então classificado de acordo com
    duas regras: na topologia de rede, o o mais próximo do Cliente é classificado primeiro; no mecanismo de pulsação,
    o estado do DataNode relatado ao longo do tempo é STALE, Essa linha está atrasada;
  3. O cliente seleciona o DataNode mais bem classificado para ler o bloco.Se o próprio cliente for
    um DataNode, ele obterá dados diretamente do local (recurso de leitura de curto-circuito);
  4. A essência da camada inferior é estabelecer um Socket Stream (FSDataInputStream) e chamar repetidamente
    o método read da classe pai DataInputStream até que os dados desse bloco sejam lidos;
  5. Após a leitura dos blocos da lista, caso a leitura do arquivo ainda não tenha terminado, o cliente continuará obtendo
    o próximo lote de listas de blocos do NameNode;
  6. Após a leitura de um bloco, será realizada a verificação do checksum.Caso ocorra algum erro na leitura do DataNode,
    o cliente notificará o NameNode, e então
    continuará a leitura a partir do próximo DataNode que possuir uma cópia do bloco;
  7. O método read lê as informações do bloco em paralelo, não uma a uma; o NameNode
    retorna apenas o endereço DataNode do bloco solicitado pelo Cliente, não os dados do bloco solicitado;
  8. Por fim, todos os blocos lidos serão mesclados em um arquivo final completo;
    insira a descrição da imagem aqui

2. Processo de gravação HDFS

  1. Cliente O cliente envia uma solicitação de upload e estabelece comunicação com o NameNode através do RPC. O NameNode
    verifica se o usuário tem a permissão de upload e se o arquivo carregado tem o mesmo nome no diretório HDFS correspondente
    . Se algum dos dois não for satisfeito, um erro será relatado diretamente. , se ambos estiverem satisfeitos, então
    retorne ao cliente uma mensagem que pode ser carregada;
  2. O cliente divide o arquivo de acordo com o tamanho do arquivo. O padrão é 128 M. Após a conclusão da divisão, ele
    envia uma solicitação ao NameNode para o qual o primeiro bloco é carregado;
  3. Após o NameNode receber a requisição, ele aloca os arquivos de acordo com a topologia da rede, percepção do rack e mecanismo de cópia
    , e retorna o endereço do DataNode disponível;
  4. Depois de receber o endereço, o cliente se comunica com um nó na lista de endereços do servidor, como A, que é essencialmente uma
    chamada RPC para estabelecer um pipeline. A continuará a chamar B após receber a solicitação e B
    chamará C para concluir a estabelecimento de todo o pipeline. , retorno ao cliente passo a passo;
  5. O cliente começa a enviar o primeiro bloco para A (ler os dados do disco primeiro e depois colocá-los no
    cache da memória local), na unidade do pacote (pacote de dados, 64kb), A recebe um pacote e envia para
    B, e então B envia Para C, A o colocará em uma fila de resposta para aguardar a resposta após cada pacote ser transmitido;
  6. Os dados são divididos em pacotes individuais e transmitidos sequencialmente no pipeline. Na
    transmissão reversa do pipeline, os ACKs são enviados um a um (resposta correta do comando) e, finalmente, o primeiro
    nó DataNode A no pipeline envia o ACK do pipeline para o Cliente;
  7. Depois que uma transmissão de bloco é concluída, o cliente solicita ao NameNode que carregue o segundo bloco novamente e
    o NameNode seleciona três DataNodes para o cliente novamente.

Acho que você gosta

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