Perguntas e respostas sobre Apache Spark em entrevista (5/9)
O próximo grupo de perguntas, é sobre Gerenciamento e Deploy.
Seguindo o raciocínio, selecionei 3 perguntas dentre as mais recorrentes. Respondi da forma como aprendi e validei por meio de minhas experiências com Spark.
Quais são os modos de deployment do Spark?
O Spark pode ser implantado de diversos modos. Como vamos escolher qual vai ser o melhor, vai depender da infraestrutura e da necessidade de cada projeto.
O que vou descrever a seguir não é uma regra cravada em pedra, é o modo que eu uso. Gosto de deixar isso claro, pois tenho amigos que utilizam os modos de deploy para finalidades diferente. Não há certo e errado, apenas o que atende a cada fim.
Sabe configurar alocação de recursos no Spark?
Sim. Fazer esses ajustes de alocação de recursos é importante para garantir o desempenho e utilizar os recursos do cluster da melhor forma possível.
Algumas configurações básicas são:
Algumas configurações mais avançadas:
Recomendados pelo LinkedIn
Exemplo de Submissão de Trabalho
sh
spark-submit \
--class <main_class> \
--master <cluster_mode> \
--deploy-mode <deploy_mode> \
--num-executors 10 \
--executor-memory 4G \
--executor-cores 4 \
--driver-memory 2G \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.dynamicAllocation.minExecutors=5 \
--conf spark.dynamicAllocation.maxExecutors=20 \
<application_jar> \
<application_args>
Ao ajustar a alocação de recursos, é importante balancear entre a quantidade de executores, a memória e os núcleos disponíveis no cluster para evitar sobrecarregar um nó específico.
Utilizar ferramentas como o Spark UI, logs de aplicação e métricas do cluster para monitorar o desempenho e fazer ajustes conforme necessário. Então, realizar testes com diferentes configurações para encontrar o ponto ótimo para a aplicação.
Como você monitora e depura jobs no Spark?
Monitorar e debuggar jobs no Spark é parte natural do trabalho para garantir que as aplicações estejam executando corretamente. Eu faço isso utilizando ferramentas de monitoramento como Spark UI; visualizo a execução de jobs no histórico de aplicações do Spark; monitoro os clusteres com YARN ResourceManager, Meses Web UI ou Kubernetes Dashboard.
Também faço uso dos Logs de Aplicação, como: Driver Logs e Executor Logs, que são os logs que podem ser visualizados no console onde a aplicação foi iniciada, ou onde configuramos o sistema de gerenciamento.
Ferramentas como JvisualVM e YourKit também podem ser usadas para inspecionar o comportamento da JVM e detectar gargalos de desempenho.
Algumas das boas práticas que aprendi com colegas de trabalho, incluem: