hailctl emr: AWS EMR support (CHANGELOG) - #15612
Draft
hmkim wants to merge 18 commits into
Draft
Conversation
added 15 commits
July 30, 2026 03:17
(cherry picked from commit 6df1cf8)
(cherry picked from commit d5c4d41)
(cherry picked from commit 0edaa9f)
(cherry picked from commit 9d2dfda)
(cherry picked from commit bafc4fd)
(cherry picked from commit deb457e)
(cherry picked from commit 6191ad9)
(cherry picked from commit 59616da)
(cherry picked from commit f4012cd)
(cherry picked from commit 53302f2)
(cherry picked from commit b3dbd80)
…te JSON overlay (cherry picked from commit f49ce19)
…ication (cherry picked from commit a4622c9)
…em python3 is 3.9) (cherry picked from commit f6a5151)
'aws emr create-default-roles' returns [] when the roles already exist, which reads as if nothing happened. hailctl emr start now verifies EMR_DefaultRole and EMR_EC2_DefaultRole before launch: it prints 'Using existing EMR default roles: ...' when present, or raises an actionable error naming any missing role. Runs only for --use-default-roles and after --dry-run returns (no AWS call on dry runs). Adds unit tests (present/missing/unexpected-error). (cherry picked from commit 631bbf7)
added 2 commits
July 30, 2026 03:29
Add a change log entry for the new hailctl emr command group. The hail#XXXXX reference is a placeholder to be replaced with the PR number once the pull request is opened.
EMR 7.x officially ships only Python 3.9 and 3.11; its default python3 is 3.9, too old for Hail. Explain in the EMR_PYSPARK_PYTHON constant and the user docs why the bootstrap installs into 3.11 and how to update the target if a future EMR release ships a newer supported Python.
Hail is standardising on Python 3.12/3.13/3.14 (hail#15603), so point the EMR bootstrap and PySpark at python3.12 instead of python3.11. Amazon Linux 2023 (EMR 7.x) packages python3.12 in its dnf repositories, so no source build is needed; verified on a real cluster with the smoke test and the GWAS tutorial (driver on 3.12, results identical to 3.11).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Change Description
Adds
hailctl emr, a command group (start/stop/list/submit) for provisioning and running Hail on Amazon EMR, bringing AWS toward parity withhailctl dataprocandhailctl hdinsight.Design was discussed with the Hail team on the forum first: https://hail.zulipchat.com/#narrow/channel/127634-Feature-Requests/topic/Contributing.20.60hailctl.20emr.60.20.28AWS.20EMR.20support.29/near/612285285
What it does
hailtop/hailctl/emr/) that drives EMR through the boto3 control plane (nativeConfigurations/BootstrapActions,ClusterRunning/StepCompletewaiters — noawsCLI shell-out). Alls3://file I/O routes throughRouterAsyncFS; boto3 is used for the EMR control plane only.RouterFS.scala:HAIL_CLOUD=awsreturns an all-NoneCloudStorageConfig, so the router falls back toHadoopFSand EMRFS/hadoop-aws resolves3:///s3a://. (Per the forum discussion, a nativeS3StorageFSis intentionally left for the Batch backend and is out of scope here.)package_data, uploaded to the user's S3 scratch bucket atstarttime; installs Hail from PyPI (pyspark excluded, since EMR provides it).emr-7.3.0(Spark 3.5.x).spark.pyspark.python/PYSPARK_PYTHONthere, since EMR's systempython3is 3.9 and Hail requires >= 3.10.emr/region,emr/remote_tmpdir), user docs, and a preflight check for the default EMR IAM roles.Testing
Stubber/Mock), plusruffclean.Open item (from the forum thread)
pip install hail==$VERSIONfrom PyPI. If the team prefers pushing a wheel to a known bucket (as with Dataproc), the bootstrap is easy to switch. Marked draft pending that decision.Note: the
(hail#XXXXX)reference in the change log entry is a placeholder for this PR's number.Security Assessment
Impact Rating
Impact Description
New
hailctlclient-side command group for AWS EMR plus a one-line JVM FS routing arm forHAIL_CLOUD=aws. It adds no code paths to the Hail Batch service deployed in GCP; it only affects users who runhailctl emragainst their own AWS accounts with their own credentials.