Quando usar Spark vs. Ray

Com o Databricks, o senhor pode executar operações do Ray e do Spark no mesmo ambiente de execução. Ter os dois mecanismos disponíveis oferece uma solução poderosa para distribuir praticamente qualquer tipo de aplicativo Python.

Em geral, Spark e Ray têm suas vantagens exclusivas para tipos específicos de tarefas.

O Ray é excelente no paralelismo de tarefas - execução de um conjunto de tarefas independentes ao mesmo tempo.

Spark é excelente em paralelismo de dados - Aplique as mesmas operações a cada elemento de um grande dataset.

Quando usar o Spark

  • Processamento de dados de grande escala: Para a maioria dos casos de uso que envolvem processamento extensivo de dados, o site Spark é altamente recomendado devido à sua otimização para tarefas como união de tabelas, filtragem e agregação.

  • Paralelismo de dados: Spark é excelente em paralelismo de dados, o que envolve a aplicação das mesmas operações a cada elemento de um grande dataset. É ideal para ETL, relatórios analíticos, engenharia de recursos e pré-processamento de dados.

  • Aprendizado de máquina: Spark MLlib as bibliotecas e SparkML do são otimizadas para machine learning algoritmos de grande escala e modelagem estatística.

Quando usar o Ray

  • paralelismo de tarefa: O Ray foi projetado para o paralelismo de tarefas, em que várias tarefas são executadas de forma simultânea e independente. É particularmente eficiente para tarefas com foco em computação.

  • Cargas de trabalho específicas: Use o Ray para cargas de trabalho em que o site Spark é menos otimizado, como aprendizado por reforço, previsão hierárquica de séries temporais, modelagem de simulação, pesquisa de hiperparâmetros, aprendizado de treinamento profundo e computação de alto desempenho (HPC).

Quando usar tanto o Ray quanto o Spark

  • Execução em modo compartilhado: O senhor pode executar o Ray cluster no mesmo ambiente que o Spark, o que lhe permite aproveitar as duas estruturas em um único aplicativo. Use o site Spark para tarefas com uso intensivo de dados e mude para o Ray nos estágios que exigem computação pesada.

  • Recuperação eficiente de dados: Em alguns casos, o site Spark pode ser usado somente para a recuperação eficiente de dados, enquanto o Ray lida com a tarefa computacional complexa.

Padrões de arquitetura de fluxo de trabalho

A seguir, os padrões recomendados para integrar o Spark e o Ray pipeline no mesmo fluxo de trabalho.

Isolar o ETL em uma subtarefa

O senhor pode isolar e separar a parte principal de extrair, transformar e carregar dados (ETL) em sua própria subtarefa dentro de um fluxo de trabalho Databricks. Isso permite que o senhor combine o tipo cluster com o tipo de carga de trabalho ETL e evite problemas de recurso de compartilhamento entre Ray e Spark.

Combinar Ray e Spark em uma única tarefa

Para combinar o Ray e o Spark em uma única tarefa, a Databricks recomenda um dos seguintes padrões:

  • Spark para manipulação de dados, Ray para computação

    Use o site Spark para gerenciar operações de entrada e saída de dados. Por exemplo, use databricks.ray.data.from_spark para passar os dados de treinamento do Spark para o Ray Data. Salve o modelo de saída no MLflow ou um conjunto de dados nas tabelas do Unity Catalog.

  • Ray dentro de uma função Spark (avançado)

    execução Ray dentro de Spark funções como UDFs ou operações de transmissão estructurada foreachBatch.

  • concorrente Spark e Ray operações (avançado)

    execução Spark operações ao lado das funções Ray. Por exemplo, use Spark para consultar dados dentro da tarefa Ray ou para gravar dados de saída enquanto o Ray ainda estiver em execução.

Para saber mais sobre como combinar o Ray e o Spark em uma única tarefa, consulte Conectar o Ray e o Spark no Databricks

gerenciamento de recursos, combinando Ray e Spark em uma única tarefa

Os conflitos de recurso são raros devido à tarefa de programar, mas podem ser gerenciados configurando a alocação de recurso para garantir que ambas as estruturas tenham memória, CPU e/ou disponibilidade de GPU suficientes.

O exemplo a seguir mostra como usar os argumentos de configuração de setup ao iniciar o Ray cluster para dividir o recurso entre o Ray e o Spark. Ajuste o tamanho do cluster ou o número de CPUs alocadas para os nós do Ray worker conforme necessário para evitar a contenção.

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()

Próximos passos

Saiba como conectar o Spark e o Ray para transmitir dados entre eles para cargas de trabalho compartilhadas.