Gerenciar os recursos para o cluster do Apache Spark no Azure HDInsight

Aprenda como acessar as interfaces como a interface do usuário do Apache Ambari, do Apache Hadoop YARN e o Servidor do histórico do Spark associado ao cluster do Apache Spark e como ajustar a configuração de cluster para desempenho ideal.

Abrir o servidor de histórico do Spark

O Servidor de Histórico do Spark é a interface do usuário da Web para aplicativos Spark concluídos e em execução. Trata-se de uma extensão da interface do usuário da Web do Spark. Para obter informações completas, consulte servidor de histórico do Spark.

Abrir a interface do usuário do Yarn

É possível usar a interface do usuário do YARN para monitorar aplicativos que estão em execução no momento no cluster Spark.

  1. No portal do Azure, abra o cluster Spark. Para obter mais informações, consulte Listar e mostrar clusters.

  2. Em Painéis de cluster, selecione Yarn. Quando solicitado, insira as credenciais de administrador para o cluster Spark.

    Launch YARN UI.

    Dica

    Alternativamente, também é possível iniciar a interface do usuário do YARN na interface do usuário do Ambari. Na interface do usuário do Ambari, navegue até YARN>links rápidos>Ativar>Interface do usuário do Resource Manager.

Otimizar clusters para aplicativos do Spark

Os três principais parâmetros que podem ser usados para a configuração do Spark dependendo dos requisitos de aplicativo são spark.executor.instances, spark.executor.cores e spark.executor.memory. Um Executor é um processo iniciado por um aplicativo Spark. Ele é executado no nó de trabalho e é responsável por realizar as tarefas do aplicativo. O número padrão de executores e os tamanhos do executor para cada cluster são calculados com base no número de nós de trabalho e no tamanho do nó de trabalho. Essas informações são armazenadas em spark-defaults.conf nos nós do cabeçalho do cluster.

Os três parâmetros de configuração podem ser definidos no nível de cluster (para todos os aplicativos que são executados no cluster) ou também podem ser especificados para cada aplicativo individualmente.

Alterar os parâmetros usando a interface de usuário do Ambari

  1. Na interface do usuário do Ambari, navegue até Spark2>configurações>Spark2-padrões personalizados.

    Set parameters using Ambari custom.

  2. Ter quatro aplicativos Spark em execução simultaneamente no cluster é o número de valores padrão ideal. Você pode alterar esses valores na interface do usuário, conforme mostrado na seguinte captura de tela:

    Set parameters using Ambari.

  3. Selecionar Salvar para salvar as alterações na configuração. Na parte superior da página, será solicitado que sejam reiniciados todos os serviços afetados. Selecione Reiniciar.

    Restart services.

Alterar os parâmetros para um aplicativo em execução no Jupyter Notebook

Para aplicativos em execução no Jupyter Notebook, é possível usar a mágica %%configure para fazer as alterações na configuração. De modo ideal, você deve fazer tais alterações no início do aplicativo, antes de executar a primeira célula de código. Isso garante que a configuração seja aplicada à sessão Livy quando for criada. Se quiser alterar a configuração em uma fase posterior no aplicativo, você deverá usar o parâmetro -f . No entanto, ao fazer isso, todo o progresso do aplicativo é perdido.

O snippet a seguir mostra como alterar a configuração para um aplicativo em execução no Jupyter.

%%configure
{"executorMemory": "3072M", "executorCores": 4, "numExecutors":10}

Os parâmetros devem ser passados como uma cadeia de caracteres JSON e devem estar na linha seguinte, logo após a mágica, conforme mostrado na coluna de exemplo.

Alterar os parâmetros de um aplicativo enviado usando spark-submit

O comando a seguir é um exemplo de como alterar os parâmetros de configuração para um aplicativo em lote que é enviado usando spark-submit.

spark-submit --class <the application class to execute> --executor-memory 3072M --executor-cores 4 –-num-executors 10 <location of application jar file> <application parameters>

Alterar os parâmetros de um aplicativo enviado usando cURL

O comando a seguir é um exemplo de como alterar os parâmetros de configuração para um aplicativo em lote que é enviado usando o cURL.

curl -k -v -H 'Content-Type: application/json' -X POST -d '{"file":"<location of application jar file>", "className":"<the application class to execute>", "args":[<application parameters>], "numExecutors":10, "executorMemory":"2G", "executorCores":5' localhost:8998/batches

Observação

Copie o arquivo JAR para sua conta de armazenamento de cluster. Não copie o arquivo JAR diretamente para o nó principal.

Alterar esses parâmetros em um Servidor Spark Thrift

O Servidor Thrift Spark fornece acesso JDBC/ODBC a um cluster Spark e é usado para atender às consultas SQL do Spark. Ferramentas como Power BI, Tableau, dentre outroas, usam o protocolo ODBC para se comunicar com o Servidor Thrift Spark e executar consultas SQL do Spark como um Aplicativo Spark. Quando um cluster Spark é criado, as duas instâncias do Servidor Thrift Spark são iniciadas, uma em cada nó de cabeçalho. Cada Servidor Thrift Spark é visto como um aplicativo Spark na interface de usuário do YARN.

O Servidor Thrift Spark usa a alocação dinâmica de executor e, portanto, spark.executor.instances não é usado. Em vez disso, o Servidor Thrift Spark usa spark.dynamicAllocation.maxExecutors e spark.dynamicAllocation.minExecutors para especificar a contagem do executor. Os parâmetros de configuração spark.executor.cores e spark.executor.memory são usados para modificar o tamanho do executor. Altere esses parâmetros, conforme mostrado nas seguintes etapas:

  • Expanda a categoria spark2-thrift-sparkconf avançada para atualizar os parâmetros spark.dynamicAllocation.maxExecutors e spark.dynamicAllocation.minExecutors.

    Configure Spark thrift server.

  • Expanda a categoria spark2-thrift-sparkconf personalizada para atualizar os parâmetros spark.executor.cores e spark.executor.memory.

    Configure Spark thrift server parameter.

Alterar a memória do driver do servidor Spark Thrift

A memória do driver do Servidor Spark Thrift é configurada para 25% do tamanho da RAM do nó de cabeçalho, desde que o tamanho total da RAM do nó de cabeçalho seja superior a 14 GB. Use a interface do usuário do Ambari para alterar a configuração da memória do driver, conforme mostrado na seguinte captura de tela:

Na interface do usuário do Ambari, navegue até Spark2>Configurações>Spark2-env avançadas. Em seguida, forneça o valor para spark_thrift_cmd_opts.

Recuperar recursos do cluster Spark

Devido à alocação dinâmica do Spark, os únicos recursos que são consumidos pelo servidor Thrift são os recursos para os dois mestres de aplicativo. Para recuperar esses recursos, é necessário interromper os serviços do Servidor Thrift em execução no cluster.

  1. Na interface de usuário do Ambari, no painel esquerdo, selecione Spark2.

  2. Na página seguinte, selecione Servidores Thrift Spark2.

    Restart thrift server1.

  3. Deverão ser exibidos os dois nós de cabeçalho nos quais o Servidor Thrift Spark2 está em execução. Selecione um dos nós de cabeçalho.

    Restart thrift server2.

  4. A próxima página lista todos os serviços em execução nesse nó de cabeçalho. Na lista, selecione o botão suspenso ao lado de Servidor Thrift Spark2 e, em seguida, selecione Parar.

    Restart thrift server3.

  5. Repita essas etapas no outro nó de cabeçalho.

Reiniciar o serviço Jupyter

Inicie a interface do usuário da Web do Ambari, conforme mostrado no início do artigo. No painel de navegação esquerdo, selecione Jupyter, selecione Ações de Serviço e selecione Reiniciar Tudo. Isso iniciará o serviço Jupyter em todos os nós de cabeçalho.

Restart Jupyter.

Monitorar recursos

Inicie a interface do usuário do Yarn, conforme mostrado no início do artigo. Na tabela de métricas de Cluster na parte superior da tela, verifique os valores de memória usada e memória Total colunas. Se os dois valores estiverem próximos, talvez não haja recursos suficientes para iniciar o próximo aplicativo. O mesmo se aplica para o VCores usado e VCores Total colunas. Além disso, no modo de exibição principal, se um aplicativo continuar em estado ACEITO e não em transição para o estado EXECUTANDO nem FALHA, também pode ser uma indicação de que ele não está obtendo recursos suficientes para iniciar.

Resource Limit.

Encerrar aplicativos em execução

  1. Na interface do usuário Yarn, no painel esquerdo, selecione executando. Na lista de aplicativos em execução, determine o aplicativo a ser encerrado e selecione a ID.

    Kill App1.

  2. Selecione Encerrar Aplicativo no canto superior direito e selecione OK.

    Kill App2.

Confira também

Para analistas de dados

Para desenvolvedores do Apache Spark