View a markdown version of this page

Compatibilidade com o Spark Connect - Amazon Athena

Compatibilidade com o Spark Connect

O Spark Connect é uma arquitetura cliente-servidor para o Apache Spark que separa o cliente da aplicação do processo de driver do cluster do Spark, permitindo conectividade remota com o Spark de clientes compatíveis. O Spark Connect também permite a depuração interativa durante o desenvolvimento diretamente de seus IDEs/clientes preferenciais.

A partir da versão de lançamento do Apache Spark versão 3.5, o Athena é compatível com o Spark Connect como um endpoint da AWS acessível usando a API GetSessionEndpoint.

Exemplos de API/CLI (GetSessionEndpoint)

Você pode usar a API GetSessionEndpoint para obter o endpoint do Spark Connect para uma sessão interativa.

aws athena get-session-endpoint \ --region "REGION" \ --session-id "SESSION_ID"

Essa API retorna o URL do endpoint do Spark Connect para essa sessão.

{ "EndpointUrl": "ENDPOINT_URL", "AuthToken": "AUTH_TOKEN", "AuthTokenExpirationTime": "AUTH_TOKEN_EXPIRY_TIME" }

Conectar de clientes autogerenciados

Você pode se conectar a uma sessão interativa do Athena Spark de clientes autogerenciados.

Pré-requisitos

Instale o cliente pyspark-connect para Spark 3.5.6 e o AWS SDK para Python.

pip install --user pyspark[connect]==3.5.6 pip install --user boto3

Confira este exemplo de script Python para enviar solicitações diretamente para um endpoint da sessão:

import boto3 import time from pyspark.sql import SparkSession client = boto3.client('athena', region_name='<REGION>') # start the session response = client.start_session( WorkGroup='<WORKGROUP_NAME>', EngineConfiguration={} ) # wait for the session endpoint to be ready time.sleep(5) response = client.get_session_endpoint(SessionId=session_id) # construct the authenticated remote url authtoken=response['AuthToken'] endpoint_url=response['EndpointUrl'] endpoint_url=endpoint_url.replace("https", "sc")+":443/;use_ssl=true;" url_with_headers = ( f"{endpoint_url}" f"x-aws-proxy-auth={authtoken}" ) # start the Spark session start_time = time.time() spark = SparkSession.builder\ .remote(url_with_headers)\ .getOrCreate() spark.version # # Enter your spark code here # # stop the Spark session spark.stop()

Confira a seguir um exemplo de script Python para acessar a interface do usuário ativa ou o servidor de histórico do Spark de uma sessão:

Region='<REGION>' WorkGroupName='<WORKGROUP_NAME>' SessionId='<SESSION_ID>' Partition='aws' Account='<ACCOUNT_NUMBER>' SessionARN=f"arn:{Partition}:athena:{Region}:{Account}:workgroup/{WorkGroupName}/session/{SessionId}" # invoke the API to get the live UI/persistence UI for a session response = client.get_resource_dashboard( ResourceARN=SessionARN ) response['Url']