Amazon EMR 24 runs open-source Spark 129 (and Hive 129 , Trino 403,499 , Flink 129 ) in three ways. EMR on EC2 24 provisions a cluster of EC2 instances and adds an EMR charge per instance-hour on top of the EC2 and EBS prices, billed per second with a one-minute minimum: for an m5.xlarge in US East the EMR charge is $0.048 an hour in AWS 24 's price list of 28 September 2026. EMR Serverless removes the cluster: you submit a job to an application and pay for the vCPU, memory and storage its workers use, $0.052624 per vCPU-hour and $0.0057785 per GB-hour on x86 in US East, with 20 GB of ephemeral storage per worker included. EMR on EKS 24 runs Spark on your own Amazon EKS (Kubernetes 5,150 ) cluster and adds a charge for the vCPU and memory each pod uses, rounded up to the second.
The nightly orders_daily job from A spark-submit Job would run on EMR Serverless unchanged, read from and written to S3. Submission is an API call rather than spark-submit (adapted from AWS's documentation; not run here):
aws emr-serverless start-job-run \
--application-id "$APP_ID" --execution-role-arn "$JOB_ROLE_ARN" \
--job-driver '{"sparkSubmit": {
"entryPoint": "s3://booknest-jobs/orders_daily.py",
"entryPointArguments": ["s3://booknest-lake/marts/orders_daily"],
"sparkSubmitParameters": "--conf spark.executor.instances=4"}}'The execution role grants the job its S3 access, so no keys appear in the job. EMR Serverless turns on dynamic allocation and spark.authenticate by default, and its defaults are 4-core, 14 GB workers; jobs cost what their workers use, so the tuning of Tuning and Memory translates directly into money.