Neste artigo MapReduce Speculative Execution, você explorará a execução especulativa do Hadoop em detalhes. Você aprenderá o que é execução especulativa, qual é sua necessidade, como podemos habilitá-la e desativá-la.
O artigo também explica se é benéfico ou não e como funciona.
O que é execução especulativa no Hadoop?
O modelo MapReduce na estrutura do Hadoop divide os trabalhos em tarefas independentes e executa essas tarefas em paralelo para reduzir o tempo geral de execução do trabalho.
Isso torna a execução do trabalho sensível ao tempo para as tarefas de execução lenta porque apenas uma única tarefa lenta pode tornar todo o tempo de execução do trabalho mais longo do que o esperado. Quando qualquer trabalho consiste em milhares ou centenas de tarefas, a possibilidade de algumas tarefas dispersas é muito real.
As tarefas podem ser lentas por vários motivos, como configuração incorreta de software ou degradação de hardware. Mas a causa que torna o trabalho lento é difícil de detectar porque as tarefas ainda são concluídas com êxito, embora demore mais do que o esperado.
A estrutura do Hadoop não tenta diagnosticar ou corrigir as tarefas de execução lenta. A estrutura tenta detectar a tarefa que está sendo executada mais lentamente do que a velocidade esperada e inicia outra tarefa, que é uma tarefa equivalente como backup.
A tarefa de backup é conhecida como tarefa especulativa e esse processo é conhecido como execução especulativa no Hadoop.
Qual é a necessidade de execução especulativa no Hadoop?
Na estrutura do Hadoop, o arquivo de entrada é particionado em vários blocos e esses blocos foram armazenados em diferentes nós no cluster do Hadoop.
Quando o trabalho MapReduce é enviado pelo cliente, ele calcula o número de InputSplits e executa tantos mapeadores quanto o número de InputSplits. Esses mapeadores (tarefas de mapeamento) são executados em paralelo nos DataNodes, onde residem os dados divididos.
Agora, e se os poucos DataNodes no cluster Hadoop não estiverem executando as tarefas tão rápido quanto os outros DataNodes, seja por causa de falha de hardware ou problemas de rede.
Portanto, as tarefas de mapa executadas nesses DataNodes serão mais lentas em comparação com as tarefas de mapa executadas nos outros DataNodes. O Redutor pode iniciar sua execução somente quando as saídas intermediárias de todos os mapeadores estiverem disponíveis.
Assim, menos tarefas de mapa de execução lenta atrasarão a execução do Redutor.
Se o Redutor estiver sendo executado no nó mais lento, isso também atrasará a saída final geral do trabalho.
Portanto, para se proteger contra essas tarefas de execução lenta, a estrutura do Hadoop inicia a mesma tarefa no outro nó. Essa otimização pela estrutura do Hadoop é chamada de execução especulativa da tarefa.
Como a execução especulativa funciona no Hadoop?
A execução especulativa não inicia as duas tarefas duplicadas de cada tarefa independente de um trabalho aproximadamente ao mesmo tempo para que elas possam competir entre si. Se a estrutura fizer isso, isso levaria ao desperdício dos recursos do cluster.
Em vez disso, o escalonador rastreia o progresso de todas as tarefas do mesmo tipo (como mapear e reduzir) em um trabalho e lança apenas as duplicatas especulativas para pequenas proporções que estavam sendo executadas mais lentamente que a média.
Quando a tarefa é concluída com êxito, todas as tarefas duplicadas em execução são eliminadas, pois não são mais necessárias.
Portanto, caso a tarefa original seja concluída antes da tarefa especulativa, a tarefa especulativa será eliminada. Se a tarefa especulativa terminar antes da tarefa original, a original será eliminada.
Observe que a execução especulativa é uma otimização. Não é um recurso para fazer com que os trabalhos do MapReduce sejam executados de forma mais confiável.
Como configurar a execução especulativa no Hadoop?
Por padrão, a execução especulativa está habilitada para a tarefa Mapear, bem como para as tarefas de redução. Suas propriedades são definidas no mapred-site.xml arquivo de configuração.
- mapreduce.map.especulative :Se esta propriedade estiver configurada para true, a execução especulativa da tarefa de mapa será habilitada. Por padrão, é verdadeiro.
- mapreduce.reduce.especulative :Se esta propriedade for definida como true, a execução especulativa da tarefa de redução será habilitada. Por padrão, é verdadeiro.
Por que você deseja desativar a execução especulativa?
O principal objetivo da execução especulativa é reduzir o tempo de execução do job. Mas isso terá o custo da eficiência do cluster Hadoop.
Em um cluster Hadoop ocupado, isso pode reduzir a taxa de transferência geral porque as tarefas redundantes estão sendo executadas para reduzir o tempo de execução do único trabalho.
Por esse motivo, alguns administradores de cluster desativam a execução especulativa no cluster do Hadoop e fazem com que os usuários a ativem explicitamente para os trabalhos individuais.
Podemos desativá-lo para as tarefas de redução porque qualquer tarefa de redução duplicada exige buscar as mesmas saídas do mapeador que a tarefa original, o que aumentará significativamente o tráfego de rede no cluster.
A execução especulativa é benéfica?
A execução especulativa no Hadoop é benéfica em alguns casos porque no cluster do Hadoop com centenas ou milhares de nós, problemas como congestionamento de rede ou falha de hardware são comuns.
Portanto, executar tarefas paralelas ou duplicadas será melhor. Mas no caso, se as duas tarefas duplicadas de cada tarefa independente de um trabalho forem iniciadas aproximadamente ao mesmo tempo, será um desperdício de recursos do cluster.
Resumo
Espero que, depois de ler este artigo, você tenha entendido claramente o que é a execução especulativa no Hadoop e por que ela é necessária. Você também viu como podemos desativá-lo para tarefas de mapa e reduzir tarefas individualmente.