Aller au contenu principal

Quand utiliser Spark vs. Ray

Avec Databricks, vous pouvez exécuter des opérations Ray et Spark dans le même environnement d'exécution. Disposer des deux moteurs offre une solution puissante pour distribuer presque tout type d'application Python.

En général, Spark et Ray ont des avantages uniques pour des types de tâches spécifiques.

Ray excelle dans le parallélisme des tâches — Exécutez un ensemble de tâches indépendantes simultanément.

Spark excelle dans le **parallélisme des données** — Appliquez la même opération à chaque élément d'un grand dataset.

Quand utiliser Spark

  • Traitement de données à grande échelle : Pour la plupart des cas d'usage impliquant un traitement intensif des données, Spark est fortement recommandé en raison de son optimisation pour des tâches comme les jointures de tables, le filtrage et l'agrégation.
  • Parallélisme des données : Spark excelle dans le parallélisme des données, ce qui implique d'appliquer la même opération à chaque élément d'un grand dataset. Il est idéal pour l'ETL, la production de rapports analytiques, l'ingénierie des fonctionnalités et le prétraitement des données.
  • Machine Learning : les bibliothèques MLlib et SparkML de Spark sont optimisées pour les algorithmes de Machine Learning à grande échelle et la modélisation statistique.

Quand utiliser Ray

  • Parallélisme des tâches : Ray est conçu pour le parallélisme des tâches, où plusieurs tâches s'exécutent simultanément et indépendamment. C'est particulièrement efficace pour les tâches axées sur le calcul.
  • **Charges de travail spécifiques** : utilisez Ray pour les charges de travail où Spark est moins optimisé, telles que l’apprentissage par renforcement, la prévision hiérarchique de séries chronologiques, la modélisation de simulation, la recherche d’hyperparamètres, l’entraînement au deep learning et le calcul haute performance (HPC).

Quand utiliser Ray et Spark

  • Exécution en mode partagé : Vous pouvez exécuter un cluster Ray dans le même environnement que Spark, ce qui vous permet de tirer parti des deux frameworks dans une seule application. Utilisez Spark pour les tâches gourmandes en données et basculez vers Ray pour les étapes qui nécessitent un calcul intensif.
  • Récupération efficace des données : Dans certains cas, Spark peut être utilisé uniquement pour la récupération efficace des données, tandis que Ray gère les tâches de calcul complexes.

Modèles d’architecture de workflow

Voici les modèles recommandés pour l'intégration des pipelines Spark et Ray dans le même workflow.

Isolez l'ETL dans une sous-tâche.

Vous pouvez isoler et séparer la partie principale d'extraction, transformation et chargement (ETL) des données en une sous-tâche distincte au sein d'un Workflow Databricks. Cela vous permet d'adapter le type de cluster au type de charge de travail ETL et d'éviter les problèmes de partage de Ressources entre Ray et Spark.

Combiner Ray et Spark en une seule tâche

Pour combiner Ray et Spark dans une seule tâche, Databricks recommande l’un des modèles suivants :

  • Spark pour le traitement des données, Ray pour le calcul.

    Utilisez Spark pour gérer les opérations de données d'entrée et de sortie. Par exemple, utilisez databricks.ray.data.from_spark pour transférer les données d’entraînement de Spark vers Ray Data. Enregistrez le modèle de sortie dans MLflow ou un jeu de données dans des tables Unity Catalog.

  • Ray dans les fonctions Spark (avancé)

    Exécutez Ray dans les fonctions Spark comme les UDF ou les opérations foreachBatch de Structured Streaming.

  • Opérations Spark et Ray concurrentes (avancées)

    Exécutez des opérations Spark parallèlement aux fonctions Ray. Par exemple, utilisez Spark pour query des données dans les tâches Ray ou pour écrire des données de sortie pendant que Ray est toujours en cours d'exécution.

Pour en savoir plus sur la combinaison de Ray et Spark dans une seule tâche, consultez Combiner Ray et Spark dans le même environnement sur Databricks

Gestion des ressources tout en combinant Ray et Spark dans une seule tâche

Les conflits de ressources sont rares grâce à la planification des tâches, mais ils peuvent être gérés en configurant l'allocation de ressources pour garantir que les deux frameworks disposent de suffisamment de mémoire, de CPU et/ou de GPU.

L'exemple suivant montre comment utiliser les arguments de configuration de configuration lors du démarrage de votre cluster Ray pour répartir les ressources entre Ray et Spark. Ajustez la taille du cluster ou le nombre de CPU alloués aux nœuds Worker Ray selon les besoins afin d'éviter les conflits.

Python
from ray.util.spark import setup_ray_cluster, shutdown_ray_cluster

# For a Databricks cluster configured with autoscaling enabled,
# The minimum worker nodes of 4 and maximum of 6 nodes.
# 2 Spark-only nodes will launch when needed.
# The Ray cluster will have 4 nodes allocated for its use.
setup_ray_cluster(
min_worker_nodes=4,
max_worker_nodes=4,
)

# Pass any custom Ray configuration with ray.init
ray.init()

Étapes suivantes

Découvrez comment connecter Spark et Ray pour transférer des données entre eux pour les charges de travail partagées.