Share via


Adapter votre code Apache Spark pour Azure Databricks

Cet article décrit les modifications nécessaires pour adapter les charges de travail Apache Spark existantes afin qu’elles s’exécutent sur Azure Databricks. Que vous passiez à Azure Databricks à partir d’un cluster local, d’une infrastructure cloud personnalisée ou d’une autre offre Apache Spark d’entreprise, la plupart des charges de travail nécessitent uniquement quelques modifications pour passer en production. Azure Databricks permet d’étendre, de simplifier et d’améliorer les performances d’Apache Spark en introduisant des optimisations personnalisées, en configurant et en déployant l’infrastructure et en gérant les dépendances dans Databricks Runtime.

Important

Quand vous mettez à niveau des versions d’Apache Spark, des changements cassants de la syntaxe sont possibles. Consultez Notes de publication sur les versions et la compatibilité de Databricks Runtime et le guide de la migration Spark.

Remplacer parquet par delta

Databricks recommande d’utiliser Delta Lake plutôt que Parquet ou ORC lors de l’écriture de données. Azure Databricks a optimisé de nombreuses fonctionnalités à des fins d’efficacité lors de l’interaction avec des tables sauvegardées par Delta Lake. La mise à niveau des données et du code du format Parquet vers Delta Lake nécessite quelques étapes seulement. Consultez Migrer un lac de données Parquet vers Delta Lake.

Étant donné que Delta Lake fournit des garanties de transaction ACID, vous pouvez peut-être simplifier les charges de travail pour supprimer les solutions de contournement visant à créer une pseudo-transactionnalité dans les opérations Apache Spark. Voici quelques exemples :

  • Création d’une structure de répertoires ou d’une stratégie de partitionnement qui permet de découvrir simultanément tous les fichiers d’une opération donnée dans le cadre d’une partition.
  • Configuration ou utilisation du metastore pour ajouter la transactionnalité pour la découverte des nouvelles.
  • Utilisation de MSCK repair pour inscrire des fichiers écrits dans une table dans le metastore.
  • Utilisation de alter table add partition pour ajouter manuellement des partitions à une table.

Consultez Quand partitionner des tables sur Azure Databricks ?.

Notes

Vous pouvez exécuter des charges de travail sans mettre à niveau les formats de données utilisés. Toutefois, de nombreuses améliorations des performances sur Azure Databricks sont directement liées à Delta Lake.

Recompiler le code Apache Spark avec des bibliothèques compatibles avec Databricks Runtime

Chaque version de Databricks Runtime est préconfigurée avec la plupart des bibliothèques qui sont nécessaires dans les applications Apache Spark. Vous pouvez installer des bibliothèques supplémentaires sur votre calcul si nécessaire. Toutefois, Databricks recommande d’utiliser dans la mesure du possible des versions empaquetées de la bibliothèque dans Databricks Runtime dont la compatibilité a été testée. Chaque version de Databricks Runtime comprend une liste de l’ensemble des bibliothèques installées. Consultez Notes de publication, versions et compatibilité de Databricks Runtime.

Supprimer les commandes de création SparkSession

De nombreuses charges de travail Apache Spark héritées déclarent explicitement une nouvelle session SparkSession pour chaque travail. Azure Databricks crée automatiquement un SparkContext pour chaque cluster de calcul et crée une session SparkSession isolée pour chaque notebook ou travail exécuté sur le cluster. Vous pouvez garder la possibilité de compiler et de tester le code localement, puis de le déployer sur Azure Databricks en mettant à niveau ces commandes pour utiliser SparkSession.builder().getOrCreate().

Supprimer les commandes de script de terminal

Apache Spark exige que les programmes déclarent explicitement qu’ils sont terminés à l’aide de commandes comme sys.exit() ou sc.stop(). Azure Databricks termine et nettoie automatiquement les travaux quand ils sont terminés. Ces commandes ne sont donc pas nécessaires et doivent être supprimées.

Azure Databricks termine et nettoie automatiquement les charges de travail Structured Streaming quand l’exécution est terminée. Vous pouvez ainsi supprimer awaitTermination() et les commandes similaires dans les applications Structured Streaming.

Faire confiance à Azure Databricks pour configurer votre cluster

Azure Databricks configure automatiquement l’ensemble des paramètres du pilote et des exécuteurs de votre cluster de calcul afin d’optimiser la résilience et l’utilisation des ressources. De configurations personnalisées pour les exécuteurs ou JVM peuvent entraîner une baisse des performances. Databricks recommande de définir uniquement les configurations Spark qui sont nécessaires pour contrôler la gestion des types ou les fonctions afin que la logique reste cohérente.

Exécuter vos charges de travail

Maintenant que vous avez supprimé des modèles, des commandes et des paramètres susceptibles d’interférer avec l’exécution d’Azure Databricks, vous pouvez exécuter vos charges de travail dans un environnement de test et comparer les performances et les résultats par rapport à votre infrastructure héritée. Bien qu’il soit possible de tirer profit de la plupart des compétences que votre équipe a pu développer pour résoudre les problèmes et améliorer les performances des charges de travail Apache Spark sur Azure Databricks, les bénéfices sont généralement plus importants si vous effectuez une mise à niveau pour utiliser de nouvelles fonctionnalités dans Apache Spark, Delta Lake ou des produits Azure Databricks personnalisés.