Skip to content

gluecat

gluecat: a cat curled around a Spark and Glue scene

AWS Glue Data Catalog client for Apache Spark.

gluecat is a Spark catalog plugin, io.github.sdaberdaku.gluecat.GlueCatalog. Each Spark catalog configured with it talks to one Glue Data Catalog, with its own catalog ID and its own credentials or IAM role. It loads, creates and alters Delta tables there, reads other data source tables, and manages Glue databases. It works as a named catalog and as spark_catalog. The supported API is the class io.github.sdaberdaku.gluecat.GlueCatalog, its configuration keys, the Glue entry format and the exception classes; other public classes are internals that may change between minor versions. It does not use the Hive metastore client, needs no patched Spark or Hive jars, and uses the AWS SDK for Java v2.

API documentation: Scaladoc.

Why

Spark and Delta Lake have no Glue support of their own. Spark's built-in session catalog, spark_catalog, talks to a Hive metastore, and Delta Lake works only through that catalog (DeltaCatalog wraps it). Reaching Glue at all means installing AWS's Glue Data Catalog client for Hive, patched Hive jars and the AWS SDK v1 included, and plugging it into that one session catalog. The result is one Glue catalog ID and one set of credentials for the whole Spark application.

When each customer, team or environment has its own AWS account, the S3 data can already live in each account, but every Delta table still has to be registered in one shared Glue catalog. A single Spark application, for example a Spark Connect server that runs jobs for several accounts, cannot register account A's tables in account A's Glue and account B's tables in account B's Glue.

Iceberg's GlueCatalog already gives each named catalog its own Glue catalog ID and IAM role. gluecat brings that model to Glue tables in general and to Delta tables in particular. Its option names follow Iceberg's AWS properties.

Artifacts

One artifact per Spark minor version and Scala version, group io.github.sdaberdaku:

Artifact Spark Scala Java bytecode JDKs tested Delta tested
gluecat-spark-3.5_2.12 3.5.3 and later 3.5 2.12 8 8, 11, 17 3.3.3
gluecat-spark-3.5_2.13 3.5.3 and later 3.5 2.13 8 8, 11, 17 3.3.3
gluecat-spark-4.0_2.13 4.0.x 2.13 17 17, 21 4.0.1, 4.1.0, 4.2.0, 4.3.1, 4.4.1
gluecat-spark-4.1_2.13 4.1.x 2.13 17 17, 21 4.1.0 and 4.2.0 (on Spark 4.1.1), 4.3.1, 4.4.1
gluecat-spark-4.2_2.13 4.2.x 2.13 17 17, 21, 25 4.4.1

Spark 3.5.0 to 3.5.2 are not supported: they reject the tables this catalog returns for non-Delta data, and initialize fails on them. matrix.json lists every Spark, Delta and JDK combination CI runs.

Delta is optional: without Delta on the classpath, the catalog serves non-Delta tables only.

Where to go next