Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jalankan sesi interaktif dengan Amazon EMR Tanpa Server melalui Spark Connect
Dengan rilis Amazon EMR emr-7.13.0 dan versi lebih baru, Anda dapat terhubung ke aplikasi Amazon EMR Tanpa Server dari PySpark klien yang dikelola sendiri seperti VS Code, PyCharm dan notebook Jupyter menggunakan API sesi EMR Tanpa Server dengan Apache Spark Connect. Spark Connect menggunakan arsitektur client-server yang memisahkan kode aplikasi Anda dari proses driver Spark. Anda mengembangkan dan men-debug PySpark kode di IDE lokal Anda sementara operasi Spark berjalan pada komputasi EMR Tanpa Server. Spark Connect menawarkan manfaat berikut:
-
Connect ke EMR Serverless dari PySpark klien mana pun, termasuk VS Code,, dan notebook Jupyter PyCharm.
-
Tetapkan breakpoint dan langkahkan PySpark kode di IDE Anda saat DataFrames dijalankan pada data skala produksi dari jarak jauh.
Sesi Spark Connect adalah koneksi terkelola antara PySpark klien lokal Anda dan driver Spark yang berjalan di Amazon EMR Tanpa Server. Saat Anda memulai sesi, EMR Serverless menyediakan driver dan pelaksana Spark atas nama Anda. Klien lokal Anda mengirim DataFrame dan operasi SQL ke driver, dan driver menjalankannya dari jarak jauh. Sesi berlanjut hingga Anda menghentikannya atau mencapai batas waktu idle, sehingga Anda dapat menjalankan beberapa kueri secara interaktif tanpa memulai ulang Spark. Setiap sesi memiliki URL titik akhir dan token otentikasi sendiri yang Anda gunakan untuk terhubung.
Izin yang diperlukan
Selain izin yang diperlukan untuk mengakses Amazon EMR Tanpa Server, tambahkan juga izin berikut ke peran IAM Anda untuk mengakses titik akhir Spark Connect dan mengelola sesi Spark Connect:
emr-serverless:StartSession-
Memberikan izin untuk membuat sesi Spark Connect pada aplikasi yang Anda tentukan sebagai.
Resource emr-serverless:GetSessionEndpoint-
Memberikan izin untuk mengambil URL titik akhir Spark Connect dan token otentikasi untuk suatu sesi.
emr-serverless:GetSession-
Memberikan izin untuk mendapatkan status sesi.
emr-serverless:ListSessions-
Memberikan izin untuk membuat daftar sesi pada aplikasi.
emr-serverless:TerminateSession-
Memberikan izin untuk mengakhiri sesi.
iam:PassRole-
Memberikan izin untuk mengakses peran eksekusi IAM saat membuat sesi Spark Connect. Amazon EMR Tanpa Server menggunakan peran ini untuk menjalankan beban kerja Anda.
emr-serverless:GetResourceDashboard-
Memberikan izin untuk membuat URL UI Spark dan menyediakan akses ke log untuk sesi tersebut.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EMRServerlessApplicationLevelAccess", "Effect": "Allow", "Action": [ "emr-serverless:StartSession", "emr-serverless:ListSessions" ], "Resource": [ "arn:aws:emr-serverless:us-east-1:111122223333:/applications/application-id" ] }, { "Sid": "EMRServerlessSessionLevelAccess", "Effect": "Allow", "Action": [ "emr-serverless:GetSession", "emr-serverless:GetSessionEndpoint", "emr-serverless:TerminateSession", "emr-serverless:GetResourceDashboard" ], "Resource": [ "arn:aws:emr-serverless:us-east-1:111122223333:/applications/application-id/sessions/*" ] }, { "Sid": "EMRServerlessRuntimeRoleAccess", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/EMRServerlessExecutionRole" ], "Condition": { "StringLike": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } } ] }
Bekerja dengan sesi interaktif
Untuk membuat Connect-enabled aplikasi Spark dan menghubungkannya, ikuti langkah-langkah ini.
Untuk memulai sesi Spark Connect
-
Buat aplikasi dengan sesi Spark Connect.
aws emr-serverless create-application \ --type "SPARK" \ --name "spark-connect-app" \ --release-label emr-7.13.0 \ --interactive-configuration '{"sessionEnabled": true}' -
Setelah Amazon EMR Serverless membuat aplikasi Anda, jalankan aplikasi jika Anda belum mengaktifkan auto-start untuk menerima sesi Spark Connect.
aws emr-serverless start-application \ --application-idAPPLICATION_ID -
Gunakan perintah berikut untuk memeriksa status aplikasi Anda. Setelah status menjadi
STARTED, mulailah sesi.aws emr-serverless get-application \ --application-idAPPLICATION_ID -
Mulai sesi dengan peran eksekusi IAM yang memberikan akses ke data Anda.
aws emr-serverless start-session \ --application-idAPPLICATION_ID\ --execution-role-arn arn:aws:iam::account-id:role/EMRServerlessExecutionRole -
Pantau status sesi menggunakan
get-sessionAPI dan tunggu sesi masukSTARTEDatauIDLEstatus.aws emr-serverless get-session \ --application-idAPPLICATION_ID\ --session-idSESSION_ID -
Ambil titik akhir Spark Connect dan token otentikasi. URL endpoint yang dikembalikan oleh
GetSessionEndpointtidak menyertakan nomor port. Saat membuat URLsc://koneksi, Anda harus menambahkan:443— misalnya,.sc://hostname:443/;use_ssl=true;x-aws-proxy-auth=tokenTanpa itu, PySpark klien default ke port 15002, yang tidak dapat dijangkau di EMR Tanpa Server.aws emr-serverless get-session-endpoint \ --application-idAPPLICATION_ID\ --session-idSESSION_IDResponsnya mencakup URL endpoint dan token otentikasi:
{ "endpoint": "ENDPOINT_URL", "authToken": "AUTH_TOKEN", "authTokenExpiresAt": "AUTH_TOKEN_EXPIRY_TIME" } -
Setelah titik akhir siap, sambungkan dari PySpark klien. Instal PySpark klien yang cocok dengan versi Spark pada aplikasi EMR Serverless Anda, dan SDK untuk Python. AWS
# Match the PySpark version to your EMR Serverless release version (3.5.6 for emr-7.13.0) pip install pyspark[connect]==3.5.6 pip install boto3
Berikut ini adalah contoh skrip Python untuk memulai sesi dan mengirim permintaan langsung ke titik akhir sesi:
import boto3 import time from pyspark.sql import SparkSession from pyspark.sql.functions import col client = boto3.client('emr-serverless', region_name='REGION') APPLICATION_ID = 'APPLICATION_ID' EXECUTION_ROLE = 'arn:aws:iam::account-id:role/EMRServerlessExecutionRole' # Start the session response = client.start_session( applicationId=APPLICATION_ID, executionRoleArn=EXECUTION_ROLE ) session_id = response['sessionId'] print(f"Session {session_id} starting...") # Wait for the session to be ready while True: response = client.get_session( applicationId=APPLICATION_ID, sessionId=session_id ) state = response['session']['state'] print(f"Session state: {state}") if state in ('STARTED', 'IDLE'): break if state in ('FAILED', 'TERMINATED'): raise Exception(f"Session failed: {response['session'].get('stateDetails', 'Unknown error')}") time.sleep(5) # Retrieve the Spark Connect endpoint and authentication token response = client.get_session_endpoint( applicationId=APPLICATION_ID, sessionId=session_id ) # Construct the authenticated remote URL auth_token = response['authToken'] endpoint_url = response['endpoint'] connect_url = endpoint_url.replace("https://", "sc://", 1) + ":443/;use_ssl=true;" connect_url += f"x-aws-proxy-auth={auth_token}" # Start the Spark session spark = SparkSession.builder.remote(connect_url).getOrCreate() print(f"Connected. Spark version: {spark.version}") # Run SQL spark.sql("SELECT 1+1 AS result").show() # Run DataFrame operations df = spark.range(100).withColumn("squared", col("id") * col("id")) df.show(10) print(f"Count: {df.count()}") # Stop the Spark session (disconnects the client only) spark.stop() # Terminate the EMR Serverless session to stop billing. # spark.stop() only closes the local client connection. The remote session # continues running and incurring charges until you explicitly terminate it # or it reaches the idle timeout. client.terminate_session( applicationId=APPLICATION_ID, sessionId=session_id ) print(f"Session {session_id} terminated.")
Untuk mengakses UI Spark langsung atau Server Riwayat Spark untuk suatu sesi, gunakan API. GetResourceDashboard
response = client.get_resource_dashboard( applicationId=APPLICATION_ID, resourceId=session_id, resourceType='SESSION' ) response['url']
Saat sesi aktif, URL membuka UI Apache Spark langsung untuk pemantauan kueri, tahapan, dan pelaksana secara real-time. Setelah sesi berakhir, Server Sejarah Spark tetap tersedia untuk analisis pasca-sesi melalui konsol Amazon EMR Tanpa Server.
Fine-grained kontrol akses dengan AWS Lake Formation untuk sesi Spark Connect
Dimulai dengan rilis emr-7.14.0 dan yang lebih baru, atau emr-spark-8.1.0 yang lebih baru, sesi Spark Connect mendukung kontrol akses berbutir halus (FGAC). AWS Lake Formation Saat Lake Formation diaktifkan, tabel, baris, kolom, dan izin tingkat sel yang Anda tentukan di Lake Formation diberlakukan pada kueri yang Anda jalankan di sesi Anda, seperti halnya untuk pekerjaan batch EMR Serverless Spark. Untuk ikhtisar tentang cara kerja EMR Tanpa Server dengan Lake Formation, lihat. Menggunakan EMR Tanpa Server dengan AWS Lake Formation untuk kontrol akses berbutir halus
Aktifkan Lake Formation untuk sesi dengan salah satu cara berikut:
-
Mulai sesi pada aplikasi yang sudah mengaktifkan Lake Formation. Untuk informasi selengkapnya, lihat Mengaktifkan Lake Formation di Amazon EMR.
-
Setel
spark.emr-serverless.lakeformation.enabledketruebawahspark-defaultsklasifikasi saat Anda memulai sesi.aws emr-serverless start-session \ --application-id APPLICATION_ID \ --execution-role-arn EXECUTION_ROLE_ARN \ --configuration-overrides '{ "runtimeConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } } ] }'
Pertimbangan dan batasan yang berlaku untuk EMR Tanpa Server dengan Lake Formation juga berlaku untuk sesi Spark Connect. Untuk informasi selengkapnya, lihat Pertimbangan dan batasan.
Untuk men-debug sesi Lake Formation-enabled Spark Connect, gunakan GetResourceDashboard API untuk mengakses log profil sistem. Untuk informasi selengkapnya, lihat Pekerjaan dan sesi debugging.
Pertimbangan dan batasan
Pertimbangkan hal berikut saat menjalankan beban kerja interaktif melalui Spark Connect.
-
Spark Connect didukung dengan rilis Amazon EMR Tanpa Server
emr-7.13.0dan yang lebih baru. Fine-grained kontrol akses melalui AWS Lake Formation didukung untuk sesi Spark Connect dengan rilisemr-7.14.0dan yang lebih baru, atauemr-spark-8.1.0dan yang lebih baru. Untuk informasi selengkapnya, lihat Fine-grained kontrol akses dengan AWS Lake Formation untuk sesi Spark Connect. -
Spark Connect hanya didukung untuk mesin Apache Spark.
-
Spark Connect mendukung DataFrame dan SQL API di. PySpark RDD-based API tidak didukung.
-
Token otentikasi dibatasi waktu hingga 1 jam. Ketika token kedaluwarsa, panggilan gRPC gagal dengan kesalahan otentikasi. Hubungi
GetSessionEndpointuntuk mendapatkan token baru dan buat yang baruSparkSessiondengan token yang diperbarui. -
Sesi berakhir setelah batas waktu idle yang dapat dikonfigurasi. Batas waktu default diatur ke 1 jam.
-
Setiap sesi memiliki batas keras 24 jam secara default, setelah itu otomatis berakhir bahkan jika itu secara aktif menjalankan tugas.
-
Setiap aplikasi EMR Tanpa Server mendukung hingga 25 sesi bersamaan secara default. Untuk meminta kenaikan batas, hubungi AWS Support.
-
Sesi Lake Formation FGAC-enabled Spark Connect mendukung koneksi klien tunggal (satu
SparkSession). EMR Tanpa Server menolak klien tambahan yang mencoba terhubung ke sesi yang sama; untuk menjalankan klien kedua, mulailah sesi terpisah. -
Secara default,
autoStopConfigaktif untuk aplikasi. Aplikasi berhenti secara otomatis setelah 15 menit tanpa sesi aktif atau pekerjaan berjalan. Anda dapat mengubah konfigurasi ini sebagai bagian dariupdate-applicationpermintaancreate-applicationatau permintaan Anda. -
Untuk pengalaman startup terbaik, konfigurasikan kapasitas pra-inisialisasi untuk driver dan pelaksana.
-
Anda harus mengaktifkan AutoStart atau memulai aplikasi secara manual sebelum memulai sesi EMR Tanpa Server.
-
PySpark Versi yang diinstal secara lokal harus cocok dengan versi Apache Spark pada aplikasi Amazon EMR Serverless Anda (3.5.6 untuk).
emr-7.13.0Ketidakcocokan versi menyebabkanImportErroratau perilaku yang tidak terduga. -
Penyimpanan tanpa server di EMR Tanpa Server tidak didukung untuk sesi interaktif dengan Spark Connect.
-
Tidak ada biaya tambahan untuk menggunakan Spark Connect. Anda hanya membayar untuk sumber daya komputasi EMR Tanpa Server (vCPU, memori, dan penyimpanan) yang dikonsumsi selama sesi Anda.
-
Konfigurasi Spark dicadangkan
spark.connect.grpc.binding.addressoleh EMR Tanpa Server dan tidak dapat diganti oleh pengguna. -
PySpark Paket yang Anda instal secara lokal harus cocok dengan versi Spark pada aplikasi EMR Serverless Anda. Ketidakcocokan versi menyebabkan kesalahan koneksi. Python UDFs (
@udf,spark.udf.register) juga memerlukan versi minor Python lokal untuk mencocokkan pekerja, atau gagal.PYTHON_VERSION_MISMATCHBuilt-in Fungsi dan DataFrame operasi SQL tidak memerlukan kecocokan versi Python. -
Untuk meneruskan konfigurasi Spark dengan
start-session, aturruntimeConfigurationdi bawah parameter.--configuration-overridesstart-job-runAPI menggunakanapplicationConfigurationsebagai gantinya.