Soporte de Spark Connect
Spark Connect es una arquitectura cliente-servidor para Apache Spark que desacopla el cliente de la aplicación del proceso de controlador del clúster de Spark, lo que permite la conectividad remota a Spark desde los clientes compatibles. Spark Connect también permite la depuración interactiva durante el desarrollo directamente desde sus IDE o clientes favoritos.
A partir de la versión 3.5 de Apache Spark, Athena admite Spark Connect como punto de conexión de AWS al que se puede acceder mediante la API GetSessionEndpoint.
Ejemplos de API/CLI (GetSessionEndpoint)
Puede usar la API GetSessionEndpoint para obtener el punto de conexión de Spark Connect para una sesión interactiva.
aws athena get-session-endpoint \ --region "REGION" \ --session-id "SESSION_ID"
Esta API devuelve la URL del punto de conexión de Spark Connect para esa sesión.
{ "EndpointUrl": "ENDPOINT_URL", "AuthToken": "AUTH_TOKEN", "AuthTokenExpirationTime": "AUTH_TOKEN_EXPIRY_TIME" }
Conexión desde clientes autoadministrados
Puede conectarse a una sesión interactiva de Athena Spark desde clientes autoadministrados.
Requisitos previos
Instale el cliente pyspark-connect para Spark 3.5.6 y el SDK de AWS para Python.
pip install --user pyspark[connect]==3.5.6 pip install --user boto3
El siguiente es un ejemplo de script de Python para enviar solicitudes directamente al punto de conexión de la sesión:
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()
El siguiente es un ejemplo de script de Python para acceder a la interfaz de usuario de Spark en vivo o al servidor de historial de Spark durante una sesión:
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']