Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-05-19 GMT+08:00

Relação entre Spark, HDFS e Yarn

Relação entre Spark e HDFS

Os dados calculados pelo Spark vêm de várias fontes de dados, como arquivos locais e HDFS. A maioria dos dados computados pelo Spark vem do HDFS. O HDFS pode ler dados em grande escala para computação paralela. Depois de computados, os dados podem ser armazenados no HDFS.

O Spark envolve o Driver e o Executor. Driver agenda tarefas e o Executor executa tarefas.

Figura 1 mostra o processo de leitura de um arquivo.

Figura 1 Processo de leitura de arquivo
O processo de leitura do arquivo é o seguinte:
  1. Driver se interconecta com o HDFS para obter as informações do Arquivo A.
  2. O HDFS retorna as informações de bloco detalhadas sobre esse arquivo.
  3. Driver define um grau paralelo com base na quantidade de dados do bloco e cria várias tarefas para ler os blocos desse arquivo.
  4. Executor executa as tarefas e lê os blocos detalhados como parte do Conjunto de dados distribuído resiliente (RDD).

Figura 2 mostra o processo de gravação de dados em um arquivo.

Figura 2 Processo de gravação de arquivos
O processo de gravação de arquivos é o seguinte:
  1. Driver cria um diretório onde o arquivo deve ser gravado.
  2. Com base no status de distribuição do RDD, o número de tarefas relacionadas à gravação de dados é calculado e essas tarefas são enviadas ao Executor.
  3. Executor executa essas tarefas e grava os dados do RDD no diretório criado em 1.

Relação entre Spark e Yarn

A computação e o agendamento do Spark podem ser implementados usando o modo Yarn. O Spark desfruta dos recursos de computação fornecidos pelos clusters de Yarn e executa tarefas de forma distribuída. Spark no Yarn tem dois modos: Yarn-cluster e Yarn-client.

  • Modo Yarn-cluster

    Figura 3 mostra a estrutura em execução do Spark no Yarn-cluster.

    Figura 3 Estrutura de operação de Spark no Yarn-cluster

    Processo de implementação do Spark no Yarn-cluster:

    1. O cliente gera as informações da aplicação e, em seguida, envia as informações para o ResourceManager.
    2. O ResourceManager aloca o primeiro contêiner (ApplicationMaster) para o SparkApplication e inicia o driver no contêiner.
    3. O ApplicationMaster se aplica a recursos do ResourceManager para executar o contêiner.

      O ResourceManager aloca o contêiner para o ApplicationMaster, que se comunica com o NodeManager, e inicia o executor no contêiner obtido. Depois que o executor é iniciado, ele se registra com o driver e solicita tarefas.

    4. O driver aloca tarefas para o executor.
    5. O executor executa tarefas e relata o status operacional para o driver.
  • Modo Yarn-client

    Figura 4 mostra a estrutura em execução do Spark no Yarn-cluster.

    Figura 4 Estrutura de operação de Spark no Yarn-client

    Processo de implementação do Spark no Yarn-client:

    No modo Yarn-client, o Driver é implantado no cliente e iniciado no cliente. No modo cliente de fio, o cliente da versão anterior é incompatível. É aconselhável utilizar o modo Yarn-cluster.

    1. O cliente envia a solicitação da aplicação de Spark para ResourceManager e, em seguida, o ResourceManager retorna os resultados. Os resultados incluem informações como ID da solicitação e o máximo e mínimo de recursos disponíveis. O cliente empacota todas as informações necessárias para iniciar o ApplicationMaster e envia as informações para ResourceManager.
    2. Depois de receber a solicitação, o ResourceManager encontra um nó adequado para o ApplicationMaster e o inicia nesse nó. ApplicationMaster é uma função no Yarn e o nome do processo no Spark é ExecutorLauncher.
    3. Com base nos requisitos de recursos de cada tarefa, o ApplicationMaster pode solicitar uma série de Contêineres para executar tarefas do ResourceManager.
    4. Depois de receber a lista de contêineres recém-alocada (do ResourceManager), o ApplicationMaster envia informações aos NodeManagers relacionados para iniciar os contêineres.

      O ResourceManager aloca os contêineres para o ApplicationMaster, que se comunica com os NodeManagers relacionados e inicia os executores nos contêineres obtidos. Depois que os executores são iniciados, ele se registra com os drivers e aplica-se para as tarefas.

      Os contêineres em execução não são suspensos e os recursos não são liberados.

    5. Os drivers alocam tarefas para os executores. O executor executa tarefas e relata o status de operação para o driver.