O Jupyter Notebook é uma ferramenta de desenvolvimento interativa poderosa que permite escrever e executar código em uma interface web e visualizar os resultados instantaneamente, sem necessidade de pré-compilação ou execução de scripts separados. Este tópico descreve como criar um ambiente de desenvolvimento eficiente para interagir com o EMR Serverless Spark.
Informações básicas
O Apache Livy usa uma REST API para interagir com o Spark, o que simplifica a comunicação entre o Spark e os servidores de aplicativos. Para obter mais informações sobre a API do Livy, consulte REST API.
Para interagir com o EMR Serverless Spark no Jupyter Notebook, use o plugin sparkmagic ou uma imagem docker. Escolha o método mais adequado às suas necessidades.
|
Método |
Caso de uso |
|
Method 1: Use a Docker image to quickly start the environment |
Configure rapidamente um ambiente de desenvolvimento autossuficiente ou replique a mesma configuração em várias máquinas usando uma imagem docker. |
|
Method 2: Use the sparkmagic plugin to start the environment |
O plugin sparkmagic para Jupyter Notebook interage com o Spark por meio de uma REST API. Atualmente, o sparkmagic suporta os protocolos Livy, Livy Lighter e Ilum. Configure o plugin sparkmagic no Jupyter Notebook e use a API Livy do EMR Serverless Spark para criar um ambiente de desenvolvimento eficiente destinado à interação com um cluster Spark remoto. |
Pré-requisitos
-
Atenda aos pré-requisitos do método escolhido:
Method 1: Use a Docker image to quickly start the environment: docker instalado. Para mais detalhes, consulte a documentação oficial do docker.
-
Method 2: Use the sparkmagic plugin to start the environment: Jupyter Notebook instalado e em execução. Para mais informações, consulte Project Jupyter | Installing Jupyter.
Os exemplos neste tópico usam o Jupyter Notebook com Python 3.8.
Um workspace criado. Para mais informações, consulte Create a workspace.
Método 1: Usar uma imagem docker
Etapa 1: Criar um gateway e um token de acesso
-
Crie e inicie um gateway.
-
Acesse a página do gateway.
Faça logon no console EMR.
No painel de navegação à esquerda, escolha EMR Serverless > Spark.
Na página Spark, clique em nome do workspace desejado.
Na página EMR Serverless Spark, clique em no painel de navegação à esquerda.
Clique em aba Livy Gateway.
Na página Livy Gateway, clique em Create Livy Gateway.
-
Na página Create Gateway, insira um Name, como
Livy-gateway, e clique em create.Ajuste outros parâmetros conforme necessário. Para mais informações, consulte Manage Gateways.
Na página Livy Gateway, localize o gateway criado e clique em START na coluna Actions.
-
-
Crie um token.
Na página Gateway, localize
Livy-gatewaye clique em Token Management na coluna Actions.Clique em Create Token.
Na caixa de diálogo Create Token, insira um Name, como
Livy-token, e clique em OK.-
Copie as informações do token.
ImportanteCopie o token imediatamente após a criação. Não será possível visualizar essas informações posteriormente. Se o token expirar ou for perdido, crie um novo ou redefina-o.
Etapa 2: Baixar e iniciar a imagem docker
-
Execute o comando a seguir para baixar a imagem docker:
docker pull emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest -
Execute o comando a seguir para iniciar a imagem:
docker run -p <host_port>:8888 emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest <endpoint> <token>A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
<host_port>Substitua este placeholder pela porta do host.
<endpoint>Substitua este placeholder pelo endpoint do Livy Gateway.
Na página Livy Gateway, clique em nome do Livy Gateway criado. O endpoint está disponível na aba Overview.
<token>Substitua este placeholder pelo token copiado na etapa anterior.
Após o início da imagem, a saída será semelhante à seguinte:
[I 2024-09-23 05:38:14.429 ServerApp] jupyter_lsp | extension was successfully linked. [I 2024-09-23 05:38:14.432 ServerApp] jupyter_server_terminals | extension was successfully linked. [I 2024-09-23 05:38:14.436 ServerApp] jupyterlab | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] notebook | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret [I 2024-09-23 05:38:14.596 ServerApp] notebook_shim | extension was successfully linked. [I 2024-09-23 05:38:14.624 ServerApp] notebook_shim | extension was successfully loaded. [I 2024-09-23 05:38:14.625 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2024-09-23 05:38:14.626 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2024-09-23 05:38:14.627 LabApp] JupyterLab extension loaded from /root/miniforge3/envs/livy/lib/python3.8/site-packages/jupyterlab [I 2024-09-23 05:38:14.627 LabApp] JupyterLab application directory is /root/miniforge3/envs/livy/share/jupyter/lab [I 2024-09-23 05:38:14.628 LabApp] Extension Manager is 'pypi'. [I 2024-09-23 05:38:14.637 ServerApp] jupyterlab | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] notebook | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] Serving notebooks from local directory: /root [I 2024-09-23 05:38:14.640 ServerApp] Jupyter Server 2.14.2 is running at: [I 2024-09-23 05:38:14.640 ServerApp] http://6eca53b95ca2:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** [I 2024-09-23 05:38:14.640 ServerApp] http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** -
Acesse a interface do Jupyter.
Copie a url
http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******da saída e abra-a no navegador. Agora você pode usar o service Jupyter para se conectar ao EMR Serverless Spark.NotaSe a conexão for feita por um servidor remoto, substitua o endereço ip
127.0.0.1pelo ip real do servidor.Se a
host_portdefinida na inicialização da imagem não for8888, substitua o número da porta pelo valor real utilizado.
Etapa 3: Testar a conectividade
Na página do JupyterLab, clique em PySpark.
-
Execute o código a seguir para consultar todos os bancos de dados acessíveis:
spark.sql("show databases").show()A saída a seguir será exibida:
%%spark spark.sql("show databases").show() Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 1 livy-pxxx pyspark idle Link None ✔ SparkSession available as 'spark'. +--------------------+ | namespace| +--------------------+ | default| | xxx db| | xxx dome| | hive test| +--------------------+
Método 2: Usar o plugin sparkmagic
Etapa 1: Criar um gateway e um token de acesso
-
Crie e inicie um gateway.
-
Acesse a página do gateway.
Faça logon no console EMR.
No painel de navegação à esquerda, escolha EMR Serverless > Spark.
Na página Spark, clique em nome do workspace desejado.
Na página EMR Serverless Spark, clique em no painel de navegação à esquerda.
Clique em aba Livy Gateway.
Na página Livy Gateway, clique em Create Livy Gateway.
-
Na página Create Gateway, insira um Name, como
Livy-gateway, e clique em create.Ajuste outros parâmetros conforme necessário. Para mais informações, consulte Manage Gateways.
Na página Livy Gateway, localize o gateway criado e clique em START na coluna Actions.
-
-
Crie um token.
Na página Gateway, localize
Livy-gatewaye clique em Token Management na coluna Actions.Clique em Create Token.
Na caixa de diálogo Create Token, insira um Name, como
Livy-token, e clique em OK.-
Copie as informações do token.
ImportanteCopie o token imediatamente após a criação. Não será possível visualizar essas informações posteriormente. Se o token expirar ou for perdido, crie um novo ou redefina-o.
Etapa 2: Instalar e ativar o plugin sparkmagic
-
Execute o comando a seguir para instalar o plugin sparkmagic:
pip install sparkmagic -
Ative a extensão para o seu ambiente Jupyter (Jupyter Notebook ou JupyterLab).
-
Para usuários do Jupyter Notebook:
jupyter nbextension enable --py --sys-prefix widgetsnbextension -
Para usuários do JupyterLab:
jupyter labextension install "@jupyter-widgets/jupyterlab-manager"
-
Para mais detalhes e opções avançadas de configuração do plugin sparkmagic, consulte a documentação do sparkmagic.
Etapa 3: Configurar e iniciar uma sessão interativa do Spark
Acesse a interface do Jupyter. Para mais informações, consulte JupyterLab.
-
Carregue a extensão sparkmagic.
%load_ext sparkmagic.magics -
Modifique a configuração de inicialização da sessão.
-
Aumente o tempo limite de inicialização para evitar falhas causadas por atrasos no agendamento de recursos.
import sparkmagic.utils.configuration as conf conf.override("livy_session_startup_timeout_seconds", 1000) -
(Opcional) Personalize a configuração de recursos do Spark.
Adicione parâmetros como
ttleconf. Para mais informações, consulte Livy Docs - REST API.Por exemplo, a configuração a seguir altera as definições de recursos do driver.
%% spark config { "conf": { "spark.driver.cores": "1", "spark.driver.memory": "7g" } }
-
-
Crie uma sessão.
Crie uma sessão do Spark no Jupyter Notebook usando Python ou Scala e forneça a configuração necessária.
%spark add -s <session_name> -l python -u https://<endpoint> -a username -p <token>%spark add -s <session_name> -l scala -u https://<endpoint> -a username -p <token>Substitua os placeholders a seguir pelos valores reais.
Parâmetro
Descrição
<session_name>Nome da sessão do Spark. Defina um nome personalizado.
<endpoint>O Endpoint(Public) ou Endpoint(Private) encontrado na aba Overview.
Ao usar um endpoint privado, certifique-se de que a máquina que executa o Jupyter esteja implantada na mesma região do Livy Gateway e altere o prefixo
https://do endpoint parahttp://.<token>Substitua este placeholder pelo token copiado na Etapa 1.
O exemplo a seguir usa Python.
%spark add -s test -l python -u https://emr-spark-livy-gateway-cn-hangzhou.data.aliyun.com/api/v1/workspace/w-0aaxxx livycompute/lc-76c4pcxxx -a username -p t6k2zy Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 0 livy-idqxxx pyspark idle Link None ✓ SparkSession available as 'spark'.Aguarde de 1 a 5 minutos até que o status da Session mude para
idle. Isso indica que a Session foi criada com sucesso e está pronta. Nesse momento, a interface exibe os detalhes da nova Session, permitindo iniciar o desenvolvimento interativo em PySpark. Você também pode visualizar as informações da Session na aba Sessions do Livy Gateway correspondente no console do Serverless Spark. -
Verifique a sessão.
Após criar a sessão com sucesso, execute códigos usando
%%spark. Por exemplo, use o código a seguir para listar todos os bancos de dados no ambiente Spark atual.%%spark spark.sql("show databases").show()A saída a seguir será exibida:
%%spark spark.sql("show databases").show() +---------+ |namespace| +---------+ | default| | testdb| +---------+
(Opcional) Etapa 4: Liberar recursos da sessão
-
Liberação automática
A sessão encerra automaticamente após duas horas de inatividade.
-
Liberação manual
-
Use o plugin
sparkmagic:%spark delete -s <session_name> -
Use o console do EMR Serverless Spark:
Na aba Sessions do Livy Gateway alvo, localize a sessão que deseja liberar e clique em Off na coluna Actions.
-