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
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.
-
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 -
Verifique o diretório
sparkmagicdeLocation.$pip show sparkmagic | grep LocationLocation: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages -
Altere seu diretório para o mesmo retornado para
Locatione instale os kernels para Scala e PySpark.$cd /Users/$username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packagesjupyter-kernelspec install sparkmagic/kernels/sparkkernel$jupyter-kernelspec install sparkmagic/kernels/pysparkkernel -
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.jsonNeste arquivo de configuração, você pode configurar parâmetros relacionados ao Spark, como
driverMemoryeexecutorCores.
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).
-
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 . -
Execute o seguinte comando SSH, modificado da seguinte forma:
-
Substitua
pelo caminho do arquivoprivate-key-file-path.pemque 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, substitua8998pelo número da porta que está de fato usando localmente. O endereço169.254.76.1:8998é a porta remota e não é alterada por você. -
Substitua
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).dev-endpoint-public-dns
ssh -iprivate-key-file-path-NTL8998:169.254.76.1:8998 glue@dev-endpoint-public-dnsVocê 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. -
-
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.
-
Verifique se o Spark está sendo executado com êxito. O comando a seguir instrui o Spark a calcular
1e, em seguida, imprimir o valor.spark.sql("select 1").show() -
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() -
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_jsonno AWS Glue Data Catalog para criar umDynamicFramedos 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
condanã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.