Kernels para Jupyter Notebook em clusters do Apache Spark no Azure HDInsight

Os clusters HDInsight Spark fornecem kernels que pode usar com o Jupyter Notebook no Apache Spark para testar as suas aplicações. Um kernel é um programa que executa e interpreta o seu código. Os três núcleos são:

  • PySpark - para aplicações escritas em Python2. (Aplicável apenas para clusters da versão Spark 2.4)
  • PySpark3 - para aplicações escritas em Python3.
  • Spark - para aplicações escritas em Scala.

Neste artigo, aprende como usar estes núcleos e os benefícios de os utilizar.

Prerequisites

Um cluster do Apache Spark em HDInsight. Para obter instruções, consulte Criar clusters Apache Spark no Azure HDInsight.

Criar um Jupyter Notebook no Spark do HDInsight

  1. No portal Azure, selecione o seu cluster Spark. Consulte Listar e mostrar clusters para obter instruções. A vista de Visão Geral abre-se.

  2. Na vista Descrição geral, na caixa Painéis do cluster, selecione Jupyter Notebook. Se for solicitado, introduza as credenciais de administrador do cluster.

    Jupyter Notebook no Apache Spark.

    Nota

    Também pode aceder ao Jupyter Notebook no cluster Spark abrindo o seguinte URL no seu navegador. Substitua CLUSTERNAME pelo nome do seu cluster:

    https://CLUSTERNAME.azurehdinsight.net/jupyter

  3. Selecione Novo e depois selecione Pyspark, PySpark3 ou Spark para criar um caderno. Use o kernel Spark para aplicações Scala, kernel PySpark para aplicações Python2 e kernel PySpark3 para aplicações Python3.

    Kernels do Jupyter Notebook para Spark.

Nota

Para o Spark 3.1, apenas o PySpark3 ou Spark estará disponível.

Kernels para Jupyter Notebook no Spark HDI4.0.

  1. Um caderno abre com o kernel que selecionaste.

Benefícios de usar os núcleos

Aqui estão alguns benefícios de usar os novos kernels com o Jupyter Notebook em clusters Spark HDInsight.

  • Contextos pré-definidos. Com PySpark, PySpark3 ou os kernels Spark , não precisa de definir explicitamente os contextos Spark ou Hive antes de começar a trabalhar com as suas aplicações. Estes contextos estão disponíveis por predefinição. Estes contextos são:

    • sc - para o contexto do Spark

    • sqlContext - para o contexto do Hive

      Assim, não precisa de executar instruções como as seguintes para definir os contextos:

      sc = SparkContext('yarn-client')
      sqlContext = HiveContext(sc)
      

      Em vez disso, pode usar diretamente os contextos pré-definidos na sua aplicação.

  • Magias celulares. O kernel PySpark fornece algumas "magias" predefinidas, que são comandos especiais que podes chamar com %% (por exemplo, %%MAGIC<args>). O comando mágico deve ser a primeira palavra numa célula de código e permitir múltiplas linhas de conteúdo. A palavra mágica deve ser a primeira palavra na cela. Adicionar qualquer coisa antes da magia, até comentários, causa um erro. Para mais informações sobre magias, veja aqui.

    A tabela seguinte lista as diferentes magias disponíveis através dos núcleos.

    Mágica Exemplo Descrição
    Ajuda %%help Gera uma tabela com todas as magias disponíveis com exemplo e descrição
    informação %%info Fornece informações de sessão para o endpoint atual do Livy
    configurar %%configure -f
    {"executorMemory": "1000M",
    "executorCores": 4}
    Configura os parâmetros para criar uma sessão. O sinalizador force (-f) é obrigatório se já tiver sido criada uma sessão, garantindo que a sessão é eliminada e recriada. Consulte o POST / sessions Request Body do Livy para uma lista de parâmetros válidos. Os parâmetros devem ser passados como uma string JSON e devem estar na linha seguinte à magia, como mostrado na coluna de exemplo.
    SQL %%sql -o <variable name>
    SHOW TABLES
    Executa uma consulta Hive contra o sqlContext. Se o -o parâmetro for passado, o resultado da consulta é mantido no contexto %%local Python como um dataframe Pandas.
    local %%local
    a=1
    Todo o código nas linhas posteriores é executado localmente. O código tem de ser código Python2 válido, independentemente do kernel que estejas a usar. Portanto, mesmo que tenhas selecionado os núcleos PySpark3 ou Spark ao criar o caderno, se usares o comando mágico %%local numa célula, essa célula só pode conter código Python2 válido.
    registos %%logs Apresenta os registos da sessão Livy atual.
    eliminar %%delete -f -s <session number> Apaga uma sessão específica do endpoint atual do Livy. Não podes apagar a sessão iniciada para o próprio kernel.
    limpeza %%cleanup -f Apaga todas as sessões do endpoint atual do Livy, incluindo a sessão deste caderno. A bandeira da força -f é obrigatória.

    Nota

    Além das magias adicionadas pelo kernel PySpark, também podes usar as magias incorporadas do IPython, incluindo %%sh. Podes usar a %%sh magia para executar scripts e blocos de código no headnode do cluster.

  • Visualização automática. O kernel Pyspark visualiza automaticamente a saída das consultas Hive e SQL. Pode escolher entre vários tipos diferentes de visualizações, incluindo Mesa, Tarte, Linha, Área e Bar.

Parâmetros suportados pelo comando mágico %%sql

O %%sql Magic suporta diferentes parâmetros que podes usar para controlar o tipo de saída que recebes ao executar consultas. A tabela seguinte apresenta o resultado.

Parâmetro Exemplo Descrição
-o -o <VARIABLE NAME> Use este parâmetro para persistir o resultado da consulta, no contexto %%local Python, como um dataframe Pandas. O nome da variável dataframe é o nome da variável que especificas.
-q -q Use este parâmetro para desligar as visualizações da célula. Se não quiseres autovisualizar o conteúdo de uma célula e só queres capturá-lo como um dataframe, então usa -q -o <VARIABLE>. Se quiser desligar visualizações sem capturar os resultados (por exemplo, para executar uma consulta SQL, como uma CREATE TABLE instrução), use -q sem especificar um -o argumento.
-m -m <METHOD> Onde METHOD é take ou sample (o padrão é take). Se o método for take, o núcleo escolhe elementos do topo do conjunto de dados de resultados especificado pelo MAXROWS (descrito mais adiante nesta tabela). Se o método for amostragem, o núcleo amostra aleatoriamente elementos do conjunto de dados de acordo com o -r parâmetro, descrito a seguir nesta tabela.
-r -r <FRACTION> Aqui, FRAÇÃO é um número de ponto flutuante entre 0,0 e 1,0. Se o método de amostragem da consulta SQL for sample, o kernel seleciona aleatoriamente a fração especificada dos elementos do conjunto de resultados. Por exemplo, se executares uma consulta SQL com os argumentos -m sample -r 0.01, então 1% das linhas de resultados são amostradas aleatoriamente.
-n -n <MAXROWS> MAXROWS é um valor inteiro. O kernel limita o número de linhas de saída a MAXROWS. Se MAXROWS for um número negativo como -1, então o número de linhas no conjunto de resultados não é limitado.

Example:

%%sql -q -m sample -r 0.1 -n 500 -o query2
SELECT * FROM hivesampletable

A afirmação acima realiza as seguintes ações:

  • Seleciona todos os registos do hivesampletable.
  • Como usamos -q, isso desativa a autovisualização.
  • Como usamos -m sample -r 0.1 -n 500, ela amostra aleatoriamente 10% das linhas na hivesampletable e limita o tamanho do conjunto de resultados a 500 linhas.
  • Finalmente, porque usámos -o query2 , também guarda a saída num dataframe chamado query2.

Considerações ao utilizar os novos kernels

Seja qual for o kernel que uses, deixar os notebooks a correr consome os recursos do cluster. Com estes kernels, como os contextos são predefinidos, o simples facto de sair dos notebooks não encerra o contexto. E assim, os recursos do cluster continuam a ser utilizados. Uma boa prática é usar a opção Fechar e Parar no menu Ficheiros do caderno quando terminar de usar o caderno. O encerramento mata o contexto e depois sai do caderno.

Onde estão guardados os cadernos?

Se o teu cluster usar o Armazenamento do Azure como conta de armazenamento predefinida, os Jupyter Notebooks são guardados na conta de armazenamento na pasta /HdiNotebooks. Cadernos, ficheiros de texto e pastas que cria a partir do Jupyter são acessíveis a partir da conta de armazenamento. Por exemplo, se usares o Jupyter para criar uma pasta myfolder e um caderno myfolder/mynotebook.ipynb, podes aceder a esse caderno dentro /HdiNotebooks/myfolder/mynotebook.ipynb da conta de armazenamento. O inverso também é verdade, ou seja, se carregares um caderno diretamente para a tua conta de armazenamento em /HdiNotebooks/mynotebook1.ipynb, o caderno também é visível a partir do Jupyter. Os notebooks permanecem na conta de armazenamento mesmo depois de o cluster ser eliminado.

Nota

Clusters HDInsight com Azure Data Lake Storage como armazenamento padrão não armazenam cadernos em armazenamento associado.

A forma como os notebooks são guardados na conta de armazenamento é compatível com o Apache Hadoop HDFS. Se fizeres SSH no cluster, podes usar os comandos de gestão de ficheiros:

Comando Descrição
hdfs dfs -ls /HdiNotebooks # Liste tudo na diretoria raiz – tudo neste diretório é visível para Jupyter a partir da página inicial
hdfs dfs –copyToLocal /HdiNotebooks # Descarregar o conteúdo da pasta HdiNotebooks
hdfs dfs –copyFromLocal example.ipynb /HdiNotebooks # Carregar um notebook example.ipynb para a pasta raiz para que fique visível a partir do Jupyter

Independentemente de o cluster utilizar o Armazenamento do Azure ou o Azure Data Lake Storage como conta de armazenamento predefinida, os notebooks são também guardados no nó principal do cluster em /var/lib/jupyter.

Navegador suportado

Os Jupyter Notebooks em clusters Spark HDInsight são suportados apenas no Google Chrome.

Sugestões

Os novos grãos estão numa fase evolutiva e irão amadurecer com o tempo. Assim, as APIs podem mudar à medida que estes kernels amadurecem. Agradeceríamos qualquer feedback que tenha sobre a utilização destes novos kernels. O feedback recebido é útil para ajudar a definir a versão final destes kernels. Pode deixar os seus comentários/feedback na secção de Feedback no final deste artigo.

Passos seguintes