本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Spark Connect 支援
Spark Connect 是 Apache Spark 的用戶端伺服器架構,可將應用程式用戶端與 Spark 叢集的驅動程式程序分離,以便從支援的用戶端遠端連線至 Spark。Spark Connect 也可直接從您最愛的 IDEs/用戶端在開發期間啟用互動式偵錯。
從 Apache Spark 3.5 版之後的版本,Athena 支援 Spark Connect 做為可使用 GetSessionEndpoint API 存取的 AWS 端點。
API/CLI 範例 (GetSessionEndpoint)
您可以使用 GetSessionEndpoint API 來取得互動式工作階段的 Spark Connect 端點。
aws athena get-session-endpoint \ --region "REGION" \ --session-id "SESSION_ID"
此 API 會傳回該工作階段的 Spark Connect 端點 URL。
{ "EndpointUrl": "ENDPOINT_URL", "AuthToken": "AUTH_TOKEN", "AuthTokenExpirationTime": "AUTH_TOKEN_EXPIRY_TIME" }
從自我管理用戶端連線
您可以從自我管理用戶端連線至 Athena Spark 互動式工作階段。
先決條件
安裝適用於 Spark 3.5.6 的 pyspark-connect 用戶端和適用於 Python 的 AWS SDK。
pip install --user pyspark[connect]==3.5.6 pip install --user boto3
以下是直接將請求傳送至工作階段端點的範例 Python 指令碼:
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()
以下是存取工作階段的即時 Spark UI 或 Spark 歷史記錄伺服器的範例 Python 指令碼:
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']