Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pinterest/pinball
Pinball is a scalable workflow manager
https://github.com/pinterest/pinball
Last synced: 8 days ago
JSON representation
Pinball is a scalable workflow manager
- Host: GitHub
- URL: https://github.com/pinterest/pinball
- Owner: pinterest
- License: apache-2.0
- Archived: true
- Created: 2015-03-04T03:13:18.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2019-12-10T19:01:58.000Z (almost 5 years ago)
- Last Synced: 2024-04-14T12:52:02.672Z (7 months ago)
- Language: JavaScript
- Size: 1.78 MB
- Stars: 1,047
- Watchers: 54
- Forks: 143
- Open Issues: 13
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
- awesome-machine-learning-engineering - Pinball
- awesome-etl - Pinball - "a scalable workflow management platform developed at Pinterest. It is built based on layered approach." (Workflow Management/Engines)
- awesome-data-engineering - Pinball - DAG based workflow manager. Job flows are defined programmatically in Python. Support output passing between jobs. (Workflow)
README
.. attention::
This project is no longer actively maintained by Pinterest.============
Pinball
============Pinball is a scalable workflow manager.
.. contents::
:local:
:depth: 1
:backlinks: noneDesign Principles
----------------
* **Simple**: based on easy to grasp abstractions
* **Extensible**: component-based approach
* **Transparent**: state stored in a readable format
* **Reliable**: stateless computing components
* **Scalable**: scales horizontally
* **Admin-friendly**: can be upgraded without aborting workflows
* **Feature-rich**: auto-retries, per-job-emails, runtime alternations, priorities, overrun policies, etc.Installation
----------------------
If you haven't already installed *libmysqlclient-dev*, *graphviz*. Please install them, e.g., ::$ sudo apt-get install libmysqlclient-dev
$ sudo apt-get install graphvizIf you want to install *Pinball* through pypi package, please do ::
$ sudo pip install pinball
Pinball uses mysql as persistent storage. Please also make sure mysql is available, and properly configured.
Quick Start
----------------------Start Pinball
~~~~~~~~~~~~~
Once Pinball is installed either through pypi package installation or source code clone, we are ready to run it. There are four important components in Pinball.* **Master**: A frontend to a persistent state repository with an interface supporting atomic job token updates. To start master, ::
$ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m master
* **UI**: A service reading directly from the storage layer used by the Master. To start UI, ::
$ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m ui
* **Scheduler**: Scheduler is responsible for running workflows on a schedule. To start scheduler, ::
$ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m scheduler
* **Worker**: A client of the Master. To start worker, ::
$ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m workers
Configure Pinball
~~~~~~~~~~~~~~~~~
In order to start Pinball, user needs to provide a pinball configuration file. A sample pinball configuraiton can be retrived at here_... _here: https://github.com/pinterest/pinball/blob/master/pinball/config/default.yaml
There are a few parameters to configure. For example:
* MySQL db configuration ::
databases:
default:
ENGINE: django.db.backends.mysql
NAME: pinball
USER: flipper
PASSWORD: flipper123
HOST: 127.0.0.1
PORT: "3306"
pinball.persistence:
ENGINE: django.db.backends.mysql
NAME: pinball
USER: flipper
PASSWORD: flipper123
HOST: 127.0.0.1
PORT: "3306"* Pinball UI configuration ::
ui_host: pinball
ui_port: 8080.. _example: https://github.com/pinterest/pinball/blob/master/pinball_ext/examples/workflows.py
.. _parser: https://github.com/pinterest/pinball/blob/master/pinball_ext/workflow/parser.py
* Application Configuration ::parser: pinball_ext.workflows.parser.PyWorkflowParser
*parser* tells Pinball how to interpret your defined workflow and jobs. The above configuration links to a Python parser_ provided by Pinball.
You can also provide your own parser to intepretate your own definition of workflow and jobs. Please check the tutorial for details. ::parser_params:
workflows_config: pinball_ext.examples.workflows.WORKFLOWS
job_repo_dir: "~"
job_import_dirs_config: pinball_ext.examples.jobs.JOB_IMPORT_DIRS*parser_params* will be taken by *parser*. Name of the variable that stores workflows config is *workflows_config*;
root dir of the repo that stores all user defined jobs is stored at *job_repo_dir*; *job_import_dirs_config* keeps list of
dirs where job class should be imported from.* Email configuration ::
default_email: [email protected]
*default_email* configures default sender of email service of Pinball.
Use Pinball
~~~~~~~~~~~
After starting Pinball with the proper configuration, user can access Pinball at *pinball:8080*.
You may find there is no workflow or jobs listed in Pinball UI when you first start Pinball. To import your workflow into Pinball,
do the following command. ::python -m pinball.tools.workflow_util -c path/to/pinball/yaml/configuration/file -f reschedule
After this, you should be able to see your workflows in Pinball UI. They will be scheduled and run according to the specified schedules.
.. image:: instance_view.png
:alt: Workflow Instance ViewDetailed Design
-------------
Design details are available in `Pinball Architecture Overview `_User Guide
-----------------
Detail user guide is available in `Pinball User Guide `_Admin Guide
------------------
Administrator guide is available in `Pinball Administrator Guide `_License
-------
Pinball is distributed under `Apache License, Version 2.0 `_.Maintainers
----------
* `Pawel Garbacki `_
* `Mao Ye `_
* `Changshu Liu `_Contributing
-----------
* `Contributors `_
* `How to contribute `_Help
-----
If you have any questions or comments, you can reach us at `[email protected] `_.