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.