Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What's coming in Airflow 2.0? - NYC Apache Airf...

What's coming in Airflow 2.0? - NYC Apache Airflow Meetup

Group of Airflow core committers talking about what's coming with Airflow 2.0!

Speakers: Ash Berlin-Taylor, Kaxil Naik, Kamil Breguła Jarek Potiuk, Daniel Imberman and Tomasz Urbaszek.

Kaxil Naik

May 13, 2020
Tweet

More Decks by Kaxil Naik

Other Decks in Technology

Transcript

  1. Who are we? Tomek Urbaszek Committer Software Engineer @ Polidea

    Jarek Potiuk Committer, PMC member Principal Software Engineer @ Polidea Kamil Breguła Committer Software Engineer @ Polidea Ash Berlin-Taylor Committer, PMC member Airflow Engineering Lead @ Astronomer Daniel Imberman Committer Senior Data Engineer @ Astronomer Kaxil Naik Committer, PMC member Senior Data Engineer @ Astronomer
  2. Scheduler High Availability Goals: • Performance - reduce task-to-task schedule

    "lag" • Scalability - increase task throughput by horizontal scaling • Resiliency - kill a scheduler and have tasks continue to be scheduled
  3. Scheduler High Availability: Design • Active-active model. Each scheduler does

    everything • Uses existing database - no new components needed, no extra operational burden • Plan to use row-level-locks in the DB • Will re-evaluate if performance/stress testing show the need
  4. Scheduler High Availability: Tasks • Separate DAG parsing from DAG

    scheduling This removes the tie between parsing and scheduling that is still present • Run a mini scheduler in the worker after each task is completed A.K.A. "fast follow". Look at immediate down stream tasks of what just finished and see what we can schedule • Test it to destruction This is a big architectural change, we need to be sure it works well.
  5. Dag Serialization (Tasks Completed) • Stateless Webserver: Scheduler parses the

    DAG files, serializes them in JSON format & saves them in the Metadata DB. • Lazy Loading of DAGs: Instead of loading an entire DagBag when the Webserver starts we only load each DAG on demand. This helps reduce Webserver startup time and memory. This reduction is notable with large number of DAGs. • Deploying new DAGs to Airflow - no longer requires long restarts of webserver (if DAGs are baked in Docker image) • Feature to use the “JSON” library of choice for Serialization (default is inbuilt ‘json’ library) • Paves way for DAG Versioning & Scheduler HA
  6. Dag Serialization (Tasks In-Progress for Airflow 2.0) • Decouple DAG

    Parsing and Serializing from the scheduling loop. • Scheduler will fetch DAGs from DB • DAG will be parsed, serialized and saved to DB by a separate component “Serializer”/ “Dag Parser” • This should reduce the delay in Scheduling tasks when the number of DAGs are large
  7. Dag Versioning Current Problem: • Change in DAG structure affects

    viewing previous DagRuns too • Not possible to view the code associated with a specific DagRun
  8. Dag Versioning (Current Problem) New task is shown in Graph

    View for older DAG Runs too with “no status”.
  9. Dag Versioning Current Problem: • Change in DAG structure affects

    viewing previous DagRuns too • Not possible to view the code associated with a specific DagRun Goal: • Support for storing multiple versions of Serialized DAGs • Baked-In Maintenance DAGs to cleanup old DagRuns & associated Serialized DAGs • Graph View shows the DAG associated with that DagRun
  10. Performance improvements • Review each component of scheduler in turn

    and its optimization. • Perf kit ◦ A set of tools that allows you to quickly check the performance of a component
  11. Results for DagFileProcessor When we have one DAG file with

    200 DAGs, each DAG with 5 tasks: Before After Diff Average time: 8080.246 ms 628.801 ms -7452 ms (92%) Queries count: 2692 5 -2687 (99%)
  12. CI environment • Moving to GitHub Actions ◦ Kubernetes Tests

    ◦ Easier way to test Kubernetes Tests locally • Quarantined tests ◦ Process of fixing the Quarantined tests • Thinning CI image ◦ Move integrations out of the image (hadoop etc) • Automated System Tests (AIP-21)
  13. Dev environment • Breeze ◦ unit testing ◦ package building

    ◦ release preparation ◦ refreshing videos • CodeSpaces integration
  14. Backport Packages • Bring Airflow 2.0 providers to 1.10.* •

    Packages per-provider • 58 packages (!) • Python 3.6+ only(!) • Automatically tested on CI • Future ◦ Automated System Tests (AIP-21) ◦ Split Airflow (AIP-8)?
  15. Production Image • Alpha quality image is ready • Gathering

    feedback • Started with “bare image” • Listening to use cases from users • Integration with Docker Compose • Integration with Helm Chart
  16. KEDA Autoscaling • Kubernetes Event-driven Autoscaler • Scales based on

    # of RUNNING and QUEUED tasks in PostgreSQL backend
  17. KEDA Queues • Historically Queues were expensive and hard to

    allocate • With KEDA, queues are free! (can have 100 queues) • KEDA works with k8s deployments so any customization you can make in a k8s pod, you can make in a k8s queue (worker size, GPU, secrets, etc.)
  18. KubernetesExecutor Pod Templating • In the K8sExecutor currently, users can

    modify certain parts of the pod, but many features of the k8s API are abstracted away • We did this because at the time the airflow community was not well acquainted with the k8s API • We want to enable users to modify their worker pods to better match their use-cases
  19. KubernetesExecutor Pod Templating • Users can now set the pod_template_file

    config in their airflow.cfg • Given a path, the KubernetesExecutor will now parse the yaml file when launching a worker pod • Huge thank you to @davlum for this feature
  20. Helm Chart • Donated by astronomer.io. • This is the

    official helm chart that we have used both in our enterprise and in our cloud offerings (thousands of deployments of varying sizes) • Users can turn on KEDA autoscaling through helm variables
  21. Helm Chart • Chart will cut new releases with each

    airflow release • Will be tested on official docker image • Significantly simplifies airflow onboarding process for Kubernetes users
  22. Functional DAGs ➔ PythonOperator boilerplate code ➔ Define order and

    data relation separately ➔ Writing jinja strings by hand
  23. Functional DAGs AIP-31: Airflow functional DAG definition ➔ Easy way

    to convert a function to an operator ➔ Simplified way of writing DAGs ➔ Pluggable XCom Storage engine Example: store and retrieve DataFrames on GCS or S3 buckets without boilerplate code
  24. Other changes of note • Connection IDs now need to

    be unique It was often confusing, and there are better ways to do load balancing • Python 3 only Python 2.7 unsupported upstream since Jan 1, 2020 • "RBAC" UI is now the only UI. Was a config option before, now only option. Charts/data profiling removed due to security risks
  25. Airflow 2.0 – deprecate, but (try) not to remove •

    Breaking changes should be avoided where we can – if upgrade is to difficult users will be left behind • Release "backport providers" to make new code layout available "now": • Before 2.0 we want to make sure we've fixed everything we want to remove or break. pip install apache-airflow-backport-providers-aws \ apache-airflow-backport-providers-google
  26. How to upgrade to 2.0 safely • Install the latest

    1.10 release • Run airflow upgrade-check (doesn't exist yet) • Fix any warnings • Upgrade Airflow