Noções Fundamentais
Recuperação do ResourceManager
Quando o ResourceManager é reiniciado, é crucial que os aplicativos em execução possam continuar a partir de seu último estado, em vez de recomeçar do zero. Para isso, o YARN armazena informações de estado durente a execução. Os armazenamentos de estado suportados incluem ZooKeeper, sistemas de arquivos como HDFS e LevelDB. A configuração típica para usar ZooKeeper como armazenamento inclui ativar a recuperação e definir a classe de armazenamento, conforme mostrado abaixo:
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>zkhost1:2181,zkhost2:2181,zkhost3:2181</value>
</property>
Alta Disponibilidade do ResourceManager
A implementação de Alta Disponibilidade (HA) do ResourceManager utiliza ZooKeeper para facilitar a troca automática entre instâncias ativas e de standby. Recomenda-se usar o mesmo ZooKeeper para armazenamento de estado a fim de evitar situações de "brain-split". Além disso, é aconselhável desativar a configuração de superDigest no ZooKeeper para proteger informações sensíveis. Um exemplo de configuração para HA:
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-teste</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>principal,secundario</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.principal</name>
<value>no-mestre1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.secundario</name>
<value>no-mestre2</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>zk-no1:2181,zk-no2:2181,zk-no3:2181</value>
</property>
Rótulos de Nó no YARN
Esta funcionalidade permite partitionar um cluster gerenciado pelo YARN usando rótulos (labels). Diferentes filas de recursos podem ser associadas a partições específicas, oferecendo flexibilidade na alocação de recursos. Detalhes adicionais podem ser encontrados na documentação oficial do Hadoop.
Atributos de Nó no YARN
Os atributos de nó permitem definir características específicas para cada NodeManager, permitindo que os aplicativos selecionem nós com base nesses atributos para implantar contêineres. Isso facilita o direcionamento de workloads para nós com configurações adequadas.
Proxy para Aplicações Web
O Application Master de cada aplicativo pode expor interfaces web ao ResourceManager. Para mitigar riscos de segurança, o YARN utiliza um proxy que filtra cookies de solicitações e marca links potencialmente inseguros. Por padrão, esse proxy é iniciado junto com o ResourceManager, mas pode ser configurado para execução independente.
Servidor de Linha do Tempo do YARN
O Timeline Server armazena e consulta informações de execução de aplicativos, tanto atuais quanto históricas. Seu modelo de dados inclui domínios de linha do tempo, entidades e eventos. As versões V1 e V2 diferem no armazenamento: V1 utiliza LevelDB, enquanto V2 usa HBase para persistência de dados.
Desenvolvimento de Aplicativos Baseados em YARN
A API do YARN permite criar aplicativos personalizados que podem ser implantados no cluster. Recursos para desenvolvimento estão disponíveis na documentação oficial do Hadoop, abordando desde a submissão até o gerenciamento de contêineres.
Segurança de Aplicativos
O YARN implementa mecanismos para restringir permissões de aplicativos, garantindo que operações como acesso a recursos e arquivos sejam controladas de acordo com políticas de segurança estabelecidas.
NodeManager
Assim como o ResourceManager, o NodeManager deve suportar recuperação após reinicializações para manter a continuidade das tarefas. Configurações detalhadas estão disponíveis na documentação do Hadoop.
Serviço de Verificação de Saúde
O NodeManager inclui um serviço de saúde que monitora o estado do nó. Ele oferece dois verificadores: o Disk Checker, que avalia a saúde dos discos, e o Health Script Externo, que permite a inclusão de scripts personalizados para verificações adicionais.
CGroups com YARN
O YARN utiliza CGroups do Linux para isolar e controlar recursos dos contêineres, garantindo que aplicativos não consumam recursos além do alocado. Configurações específicas são encontradas na documentação do Hadoop.
Contêineres Seguros
Os contêineres são restritos às permissões do usuário que os submeteu, impedindo que aplicativos de diferentes usuários acessem arquivos uns dos outros. Isso reforça a segurança em ambientes multiusuário.
Remoção de Nós
Existem duas abordagens para remover nós do cluster: remoção normal, que desconecta o nó imediatamente, e remoção grácil, que aguarda a conclusão das tarefas em andamento antes da desconexão.
Contêineres Oportunistas
Por padrão, o YARN aloca contêineres apenas quando recursos estão disponíveis em um NodeManager. Com contêineres oportunistas, mesmo que recursos não estejam imediatamente disponíveis, o contêiner é designado ao nó e inicia a execução assim que recursos ficarem livres, melhorando a utilização do cluster.
Implantação e Configuração
Modo Básico de Implantação
Para iniciar componentes do YARN individualmente, use os seguintes comandos:
# Iniciar ResourceManager
$HADOOP_HOME/bin/yarn --daemon start resourcemanager
# Iniciar NodeManager
$HADOOP_HOME/bin/yarn --daemon start nodemanager
# Iniciar Proxy Server
$HADOOP_HOME/bin/yarn --daemon start proxyserver
# Iniciar History Server (executado como usuário mapred)
$HADOOP_HOME/bin/mapred --daemon start historyserver
Implantação de Alto Desempenho
O Hadoop fornece scripts em lote para iniciar e parar todos os componentes do YARN de uma vez. Esses scripts, como start-yarn.sh e stop-yarn.sh, utilizam o arquivo workers localizaod em etc/hadoop/workers para listar os hosts dos NodeManagers. A execução baseia-se em login SSH sem senha. O History Server não é gerenciado por esses scripts e deve ser iniciado separadamente.
Resolução de Erros Comuns
Erro de Caminho de Classe do YARN
Se ocorrer um erro indicando que a classe principal não foi encnotrada durante a execução de um aplicativo, verifique o caminho de classe configurado em yarn.application.classpath. O caminho padrão depende de variáveis de ambiente como HADOOP_CONF_DIR. Soluções incluem definir essas variáveis ou configurar explicitamente o caminho no yarn-site.xml.
<property>
<name>yarn.application.classpath</name>
<value>/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/yarn/*</value>
</property>
Serviço Auxiliar MapReduce Ausente
Erros relacionados ao mapreduce_shuffle indicam que o serviço auxiliar para shuffle do MapReduce não está configurado. Adicione as seguintes propriedades ao yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
Excesso de Memória Virtual
Se um contêiner exceder o limite de memória virtual, ajuste os parâmetros de memória no mapred-site.xml. A memória virtual permitida é calculada como mapreduce.map.memory.mb * yarn.nodemanager.vmem-pmem-ratio para tarefas de mapa, e similarmente para tarefas de redução. Aumente os valores de memória física ou a taxa yarn.nodemanager.vmem-pmem-ratio para resolver o problema.
Recursos Adicionais
Para informações detalhadas, consulte a documentação oficial do Hadoop sobre YARN, incluindo guias de gerenciamento de recursos e configurações avançadas.