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 se destaca 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 junçã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 algoritmos de aprendizado de máquina 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 clustering 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 de clustering 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 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 Combinar o Ray e o Spark no mesmo ambiente na 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-se 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 clustering do Ray para dividir o recurso entre o Ray e o Spark. Ajuste o tamanho do clustering ou o número de CPUs alocadas aos nós do Ray worker conforme necessário para evitar 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óximas etapas
Saiba como conectar o Spark e o Ray para transmitir dados entre eles para cargas de trabalho compartilhadas.