genie is a free, open source orchestration & scheduling project written in Java and released under Apache-2.0. It has 1,768 GitHub stars, 377 forks and 17 open issues, and was last pushed 3 days ago. On this registry it ranks #69 of 130 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 1 stars over the last 30 tracked days.

What is genie?

Genie is Netflix's Apache-2.0 federated Big Data orchestration and execution engine, built for the two sides of a cluster boundary: data consumers who want to submit a query without assembling binaries and configuration by hand, and the infrastructure providers who run the clusters those queries land on.

What it is

Genie is a distributed Big Data orchestration service written in Java and published by Netflix under the Apache License 2.0. It sits between data consumers and Big Data infrastructure, acting as both an orchestration layer and an execution engine. A consumer submits a request in plain terms — the README's own example is running a query using SparkSQL against production data — and Genie resolves the rest: it dynamically assembles the required binaries and configurations, routes the job, executes it, monitors it, notifies the user on completion, and makes the output available for immediate and future use. Every job's details are recorded for later audit or debugging.

The concrete problem it replaces is the manual, per-user setup ritual that surrounds every Big Data query. Data scientists and other applications would otherwise find, download, install and configure a stack of binaries, libraries and tools; point at the correct cluster using valid and often obscure configuration and parameters; then manually monitor the query and retrieve its output. On the provider side, the same friction reappears as support load: users need extensive help configuring a working setup that is hard to debug remotely, and infrastructure upgrades or expansion require careful coordination with every user. What works today may not work tomorrow — clusters move, binaries fall out of compatibility — and that overhead multiplies by the number of consumers. Genie absorbs that boundary work so providers only expose resources such as clusters and binaries and plug in the routing and authorization logic, such as which cluster a query goes to, which Spark version runs it, and whether a user may touch the data.

Key capabilities

  • Federated orchestration across clusters: routes a submitted job to a cluster and engine version selected by provider-supplied logic rather than by the requester.
  • Dynamic assembly of binaries and configurations at execution time, so consumers do not install or pin a toolchain locally.
  • Job execution with monitoring and completion notification, followed by output made available for immediate and future retrieval.
  • Per-job record keeping of every job's details for later audit or debugging.
  • genie-app, a self-contained Genie service server, and genie-agent-app, a self-contained Genie CLI job executor.
  • genie-client, a client that interacts with the service over its REST API.
  • Re-wrappable internals: genie-web and genie-agent are libraries that can be rewrapped to inject and override server and agent components, with genie-common, genie-common-internal and genie-common-external supplying internal components.

Who uses it and how

  • Data scientists submitting engine-specific queries, such as SparkSQL against production data, without managing binaries or cluster addresses themselves.
  • Applications acting as data consumers through the REST API, using genie-client to submit and track jobs programmatically.
  • Big Data infrastructure teams that publish clusters and binaries as available resources and supply the routing, version-selection and access-control logic.
  • Platform teams running genie-app as a shared service at the boundary between consumers and multiple clusters, keeping a per-job record for audit and debugging.
  • Operators customizing behavior by rewrapping genie-web or genie-agent and overriding components rather than forking the service.

Getting started

Deployment centers on the self-contained genie-app service server, with genie-agent-app providing a self-contained CLI job executor and genie-client or the REST API used to submit work. The README points to the official documentation at https://netflix.github.io/genie for setup detail, and builds run on Travis CI across the master (4.2.x), 4.1.x and 4.0.x branches.

How it compares

No list of paid products this project replaces is provided in the facts, and no comparable tools are named either, so Genie stands alone in this registry as the Netflix OSS entry for federated Big Data orchestration. The distinguishing characteristics the facts do support are its Apache-2.0 licence, its origin inside Netflix's open-source program, and its design as a service boundary rather than a single-cluster scheduler.

When to use it — and when not to

A self-hoster must operate a Genie service server, the clusters and binaries it routes to, and the provider-supplied logic for routing, version selection and authorization, since Genie delegates those decisions rather than making them. It is a poor fit for a single team running one cluster with one engine who just needs a scheduler — the boundary Genie manages does not exist there. The main caveat visible in the facts is documentation depth: the README is conceptual and points outward for the operational detail, with no install commands, container image or configuration example given inline, and the repository carries a NetflixOSS lifecycle badge whose value is not shown.

project readme (upstream, from github) — read inline

Genie

License Issues NetflixOSS Lifecycle

Introduction

Genie is a federated Big Data orchestration and execution engine developed by Netflix.

Genie’s value is best described in terms of the problem it solves.

Big Data infrastructure is complex and ever-evolving.

Data consumers (Data Scientists or other applications) need to jump over a lot of hurdles in order to run a simple query:

  • Find, download, install and configure a number of binaries, libraries and tools
  • Point to the correct cluster, using valid configuration and reasonable parameters, some of which are very obscure
  • Manually monitor the query, retrieve its output

What works today, may not work tomorrow. The cluster may have moved, the binaries may no longer be compatible, etc.

Multiply this overhead times the number of data consumers, and it adds up to a lot of wasted time (and grief!).

Data infrastructure providers face a different set of problems:

  • Users require a lot of help configuring their working setup, which is not easy to debug remotely
  • Infrastructure upgrades and expansion require careful coordination with all users

Genie is designed to sit at the boundary of these two worlds, and simplify the lives of people on either side.

A data scientist can “rub the magic lamp” and just say “Genie, run query ‘Q’ using engine SparkSQL against production data”. Genie takes care of all the nitty-gritty details. It dynamically assembles the necessary binaries and configurations, execute the job, monitors it, notifies the user of its completion, and makes the output data available for immediate and future use.

Providers of Big data infrastructure work with Genie by making resources available for use (clusters, binaries, etc) and plugging in the magic logic that the user doesn’t need to worry about: which cluster should a given query be routed to? Which version of spark should a given query be executed with? Is this user allowed to access this data? etc. Moreover, every job’s details are recorded for later audit or debugging.

Genie is designed from the ground up to be very flexible and customizable. For more details visit the official documentation

Builds

Genie builds are run on Travis CI here.

Branch Build Coverage (coveralls.io)
master (4.2.x) Build Status Coverage Status
4.1.x Build Status Coverage Status
4.0.x Build Status Coverage Status

Project structure

genie-app

Self-contained Genie service server.

genie-agent-app

Self-contained Genie CLI job executor.

genie-client

Genie client interact with the service via REST API.

genie-web

The main server library, can be re-wrapped to inject and override server components.

genie-agent

The main agent library, can be re-wrapped to inject and override components.

genie-common, genie-common-internal, genie-common-external

Internal components libraries shared by the server, agent, and client modules.

genie-proto

Protobuf messages and gRPC services definition shared by server and agent. This is not a public API meant for use by other clients.

genie-docs, genie-demo

Documentation and demo application.

genie-test, genie-test-web

Testing classes and utilities shared by other modules.

genie-ui

JavaScript UI to search and visualize jobs, clusters, commands.

genie-swagger

Auto-configuration of Swagger via Spring Fox. Add to final deployment artifact of server to enable.

Artifacts

Genie publishes to Maven Central and Docker Hub

Refer to the demo section of the documentations for examples. And to the setup section for more detailed instructions to set up Genie.

Python Client

The Genie Python client is hosted in a different repository.

Further info

For a detailed explanation of Genie architecture, use cases, API documentation, demos, deployment and customization guides, and more, visit the Genie documentation.

Contact

To contact Genie developers with questions and suggestions, please use GitHub Issues

Frequently asked questions

Is genie free to use?

genie is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does genie do?

Distributed Big Data Orchestration Service

What is genie written in?

genie is primarily written in Java. Its source is publicly available at https://github.com/Netflix/genie, and it has 1,768 GitHub stars.