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.
- Driver se interconecta com o HDFS para obter as informações do Arquivo A.
- O HDFS retorna as informações de bloco detalhadas sobre esse arquivo.
- Driver define um grau paralelo com base na quantidade de dados do bloco e cria várias tarefas para ler os blocos desse arquivo.
- 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.
- Driver cria um diretório onde o arquivo deve ser gravado.
- 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.
- 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.
Processo de implementação do Spark no Yarn-cluster:
- O cliente gera as informações da aplicação e, em seguida, envia as informações para o ResourceManager.
- O ResourceManager aloca o primeiro contêiner (ApplicationMaster) para o SparkApplication e inicia o driver no contêiner.
- 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.
- O driver aloca tarefas para o executor.
- 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.
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.
- 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.
- 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.
- Com base nos requisitos de recursos de cada tarefa, o ApplicationMaster pode solicitar uma série de Contêineres para executar tarefas do ResourceManager.
- 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.
- Os drivers alocam tarefas para os executores. O executor executa tarefas e relata o status de operação para o driver.