Como lançar um aplicativo baseado em FIO
Para mostrar como os vários fios (mais um recurso do negociador) componentes trabalham juntos, você pode caminhar através da execução de uma aplicação. Por uma questão de argumento, ele pode ser um aplicativo MapReduce, com a arquitetura JobTracker e TaskTracker.
Basta lembrar que, com o fio, pode ser qualquer tipo de aplicação para a qual não há uma estrutura de aplicativo. A figura mostra as interações, eo relato em prosa está definido para baixo na lista passo seguinte:
A aplicação cliente envia uma solicitação de aplicativo para o Gerenciador de recursos.
O Gerenciador de recursos faz uma Node Manager para criar uma instância Mestre Aplicação para esta aplicação. O Node Manager recebe um recipiente para ele e começa-lo.
Esta nova aplicação Mestre inicializa-se por registrar-se com o Gerenciador de recursos.
O Mestre Aplicação descobre como muitos recursos de processamento são necessários para executar o aplicativo inteiro.
Isto é feito através solicitando a partir do NameNode os nomes e locais dos arquivos e blocos de dados as necessidades da aplicação e calcular quantas tarefas mapa e reduzir as tarefas são necessárias para processar todos esses dados.
O Mestre de aplicação, em seguida, solicita os recursos necessários a partir do Gerenciador de recursos.
O Mestre aplicativo envia mensagens de pulsação para o Gerenciador de recursos ao longo de sua vida, com uma lista permanente de recursos solicitados e quaisquer alterações (por exemplo, uma solicitação de matar).
O Gerenciador de recursos aceita a solicitação de recursos e enfileira as solicitações de recursos específicos ao lado de todas as outras solicitações de recursos que já estão programados.
Como os recursos solicitados estiverem disponíveis nos nós de escravos, o Gerenciador de recursos concede as concessões aplicação Mestre para contentores em nós escravos específicos.
O Mestre aplicativo solicita o recipiente atribuído a partir do Node Manager e envia-lhe um Contexto Lançamento Container (CLC).
O CLC inclui tudo, a tarefa aplicativo precisa para executar: variáveis de ambiente, tokens de autenticação, os recursos locais necessários em tempo de execução (por exemplo, arquivos de dados adicionais, ou lógica de aplicação de JARs), ea cadeia de comando necessária para iniciar o processo real. O Node Manager, em seguida, cria o processo recipiente solicitado e inicia-lo.
O aplicativo é executado enquanto os processos de contêiner estão em execução.
O Mestre aplicação monitoriza o seu progresso, e no caso de uma falha de embalagem ou uma falha de nó, a tarefa é reiniciado no próximo slot disponível. Se a mesma tarefa falhar após quatro tentativas (um valor padrão que pode ser personalizado), todo o trabalho falhará. Durante esta fase, o mestre de aplicativos também se comunica diretamente com o cliente para responder às solicitações de status.
Além disso, enquanto os contentores estão em execução, o Gerenciador de recursos pode enviar uma ordem de matar ao Node Manager para finalizar um recipiente específico.
Isto pode ser como um resultado de uma mudança de prioridade de escalonamento ou de uma operação normal, tal como a aplicação em si já a ser concluído.
No caso de aplicativos MapReduce, após as tarefas mapa terminar, os recursos pedidos de candidatura mestre para uma rodada de reduzir as tarefas para processar os conjuntos de resultados provisórios das tarefas do mapa.
Quando todas as tarefas estiverem concluídas, o Mestre aplicação envia o conjunto de resultados para o aplicativo cliente, informa o Gerenciador de recursos que o aplicativo foi concluída com êxito, deregisters-se do Gerenciador de recursos, e se desliga.
Como os daemons JobTracker e TaskTracker e slots de processamento em Hadoop 1, todos os daemons de fios e os recipientes são processos Java, executados em JVMs. Com FIO, você não é mais necessário para definir quantos mapa e reduzir slots que você precisar - você simplesmente decidir quanta memória mapa e reduzir as tarefas podem ter. O Gerenciador de recursos irá alocar recipientes por mapa ou reduzir tarefas no cluster com base na quantidade de memória disponível.
Quando você está escrevendo aplicações Hadoop, você não precisa se preocupar com a requisição de recursos e monitoramento recipientes. Seja qual for a estrutura de aplicativo que você está usando faz tudo isso para você. É sempre uma boa idéia, no entanto, para entender o que acontece quando os aplicativos estão em execução no cluster. Este conhecimento pode ajudá-lo imensamente quando você está monitorando o progresso aplicação ou depurar uma tarefa falhou.