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
- O cliente envia a solicitação RPC para NameNode. A localização do bloco de arquivo solicitado;
- 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; - 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); - 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; - 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; - 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; - 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; - Por fim, todos os blocos lidos serão mesclados em um arquivo final completo;
2. Processo de gravação HDFS
- 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; - 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; - 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; - 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; - 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; - 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; - 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.