Tutorial: configurar um caderno Jupyter no JupyterLab para testar e depurar scripts de ETL - AWS Glue

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: configurar um caderno Jupyter no JupyterLab para testar e depurar scripts de ETL

Neste tutorial, você conectará um caderno Jupyter no JupyterLab em execução em sua máquina local a um endpoint de desenvolvimento. Você o faz para que possa executar, depurar e testar interativamente scripts de extração, transformação e carregamento (ETL) do AWS Glue antes de implantá-los. Este tutorial usa o redirecionamento de portas Secure Shell (SSH) para conectar sua máquina local a um endpoint de desenvolvimento do AWS Glue. Para obter mais informações, consulte Redirecionamento de portas na Wikipédia.

Etapa 1: Instalar o JupyterLab e o Sparkmagic

Você pode instalar o JupyterLab usando o conda ou pip. O conda é um sistema de gerenciamento de pacotes e de ambientes de código aberto que é executado no Windows, macOS e Linux. Já o pip é o instalador de pacotes para Python.

Se estiver instalando no macOS, é necessário ter o Xcode instalado antes de instalar o Sparkmagic.

  1. Instale o JupyterLab, o Sparkmagic e as extensões relacionadas.

    $ conda install -c conda-forge jupyterlab $ pip install sparkmagic $ jupyter nbextension enable --py --sys-prefix widgetsnbextension $ jupyter labextension install @jupyter-widgets/jupyterlab-manager
  2. Verifique o diretório sparkmagic de Location.

    $ pip show sparkmagic | grep Location Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
  3. Altere seu diretório para o mesmo retornado para Location e instale os kernels para Scala e PySpark.

    $ cd /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages $ jupyter-kernelspec install sparkmagic/kernels/sparkkernel $ jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
  4. Faça download de um arquivo de amostra config.

    $ curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json

    Neste arquivo de configuração, você pode configurar parâmetros relacionados ao Spark, como driverMemory e executorCores.

Etapa 2: Iniciar o JupyterLab

Quando você inicia o JupyterLab, seu navegador da Web padrão é aberto automaticamente e o URL http://localhost:8888/lab/workspaces/{workspace_name} é exibido.

$ jupyter lab

Etapa 3: iniciar o redirecionamento de porta SSH para se conectar ao endpoint de desenvolvimento

Em seguida, use o encaminhamento de porta local SSH para encaminhar uma porta local (aqui, 8998) ao destino remoto definido por AWS Glue (169.254.76.1:8998).

  1. Abra uma janela do terminal separada que conceda acesso ao SSH. No Microsoft Windows, você pode usar o shell BASH fornecido pelo Git for Windows (Git para Windows) ou instalar o Cygwin.

  2. Execute o seguinte comando SSH, modificado da seguinte forma:

    • Substitua private-key-file-path pelo caminho do arquivo .pem que contém a chave privada correspondente à chave pública que você usou para criar seu endpoint de desenvolvimento.

    • Se você estiver redirecionando uma porta diferente de 8998, substitua 8998 pelo número da porta que está de fato usando localmente. O endereço 169.254.76.1:8998 é a porta remota e não é alterada por você.

    • Substitua dev-endpoint-public-dns pelo endereço DNS público do seu endpoint de desenvolvimento. Para encontrar esse endereço, navegue até seu endpoint de desenvolvimento no console do AWS Glue, escolha o nome e copie o valor de Public address (Endereço público) listado na página Endpoint details (Detalhes do endpoint).

    ssh -i private-key-file-path -NTL 8998:169.254.76.1:8998 glue@dev-endpoint-public-dns

    Você provavelmente verá uma mensagem de aviso semelhante à seguinte:

    The authenticity of host 'ec2-xx-xxx-xxx-xx.us-west-2.compute.amazonaws.com (xx.xxx.xxx.xx)' can't be established. ECDSA key fingerprint is SHA256:4e97875Brt+1wKzRko+JflSnp21X7aTP3BcFnHYLEts. Are you sure you want to continue connecting (yes/no)?

    Digite yes (sim) e deixe aberta a janela do terminal enquanto utiliza o JupyterLab.

  3. Verifique se o redirecionamento de porta SSH está funcionando corretamente com o endpoint de desenvolvimento.

    $ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}

Etapa 4: executar um fragmento de script simples em um parágrafo do caderno

Agora seu caderno no JupyterLab deve funcionar com seu endpoint de desenvolvimento. Digite o seguinte fragmento de script no seu caderno e execute-o.

  1. Verifique se o Spark está sendo executado com êxito. O comando a seguir instrui o Spark a calcular 1 e, em seguida, imprimir o valor.

    spark.sql("select 1").show()
  2. Verifique se a integração com o AWS Glue Data Catalog está funcionando. O comando a seguir lista as tabelas do Data Catalog.

    spark.sql("show tables").show()
  3. Verifique se um fragmento de script simples que usa as bibliotecas do AWS Glue funciona.

    O script a seguir usa os metadados da tabela persons_json no AWS Glue Data Catalog para criar um DynamicFrame dos seus dados de exemplo. Em seguida, ele imprime a contagem de itens e o esquema desses dados.

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about *this* data print("Count: ", persons_DyF.count()) persons_DyF.printSchema()

O resultado do script é o seguinte:

Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- note: string | | |-- name: string | | |-- lang: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string

Solução de problemas

  • Durante a instalação do JupyterLab, se o seu computador estiver atrás de um proxy corporativo ou firewall, você poderá encontrar erros de HTTP e SSL devido a perfis de segurança personalizados gerenciados por departamentos de TI corporativos.

    Segue-se um exemplo de um erro típico que ocorre quando conda não consegue se conectar aos seus próprios repositórios:

    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>

    Isso pode acontecer porque sua empresa pode bloquear conexões com repositórios amplamente utilizados em comunidades de Python e JavaScript. Para obter mais informações, consulte Installation Problems (Problemas de instalação) no site do JupyterLab.

  • Se encontrar um erro de conexão recusada ao tentar se conectar ao seu endpoint de desenvolvimento, pode ser que você esteja usando um endpoint de desenvolvimento desatualizado. Tente criar um novo endpoint de desenvolvimento e se reconectar.