Adaptez votre code Apache Spark existant pour Databricks
Cet article décrit les modifications requises pour adapter les charges de travail Apache Spark existantes afin qu'elles s'exécutent sur Databricks. Que vous passiez à Databricks depuis un cluster on-premise, une infrastructure cloud personnalisée ou une autre offre Apache Spark d'entreprise, la plupart des charges de travail ne nécessitent que quelques modifications pour être mises en production. Databricks étend, simplifie et améliore les performances d'Apache Spark en introduisant des optimisations personnalisées, en configurant et en déployant l'infrastructure, et en maintenant les dépendances dans Databricks Runtime.
Lorsque vous mettez à niveau les versions d'Apache Spark, il peut y avoir des modifications de syntaxe qui entraînent des ruptures. Consultez les versions et la compatibilité des notes de version de Databricks Runtime et le guide de migration Spark.
Modifier parquet en delta
Databricks recommande d'utiliser Delta Lake plutôt que Parquet ou ORC lors de l'écriture des données. Databricks a optimisé de nombreuses fonctionnalités pour l'efficacité lors de l'interaction avec les tables basées sur Delta Lake, et la mise à niveau des données et du code de Parquet vers Delta Lake ne nécessite que quelques étapes. Consultez Migrer un data lake Parquet vers Delta Lake.
Étant donné que Delta Lake fournit des garanties de transactions ACID, vous pourriez être en mesure de simplifier les charges de travail pour supprimer les solutions de contournement visant à créer une pseudo-transactionnalité dans les opérations Apache Spark. Exemples :
- Construction d'une structure de répertoires ou d'une stratégie de partitionnement qui permet à tous les fichiers d'une Opérations donnée d'être découverts simultanément dans le cadre d'une partition.
- Configuration ou utilisation du métastore pour ajouter une transactionnalité à la découverte de nouvelles données.
- Utilisation de
MSCK repairpour enregistrer les fichiers écrits dans une table dans le metastore. - À l'aide de
alter table add partitionpour ajouter manuellement des partitions à une table.
Consultez Quand partitionner les tables sur Databricks.
Vous pouvez exécuter des charges de travail sans mettre à niveau les formats de données utilisés, mais de nombreux gains de performance les plus importants sur Databricks sont directement liés à Delta Lake.
Recompiler le code Apache Spark avec des bibliothèques compatibles Databricks Runtime
Chaque version de Databricks Runtime est préconfigurée avec de nombreuses bibliothèques requises dans les applications Apache Spark. Vous pouvez installer des bibliothèques supplémentaires sur votre compute si nécessaire, mais chaque fois que possible, Databricks recommande d'utiliser les versions de bibliothèque packagées dans le Databricks Runtime qui sont testées pour leur compatibilité. Chaque version de Databricks Runtime inclut une liste de toutes les bibliothèques installées. Consultez les notes de version et la 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 SparkSession pour chaque Job. Databricks crée automatiquement un SparkContext pour chaque cluster de compute, et crée une SparkSession isolée pour chaque Notebook ou Job exécuté sur le cluster. Vous pouvez conserver la possibilité de compiler et de tester le code localement, puis de le déployer sur Databricks en mettant à niveau ces commandes pour utiliser SparkSession.builder().getOrCreate().
Supprimer les commandes de script du terminal
Apache Spark exige que les programmes déclarent explicitement qu'ils sont terminés en utilisant des commandes telles que sys.exit() ou sc.stop(). Databricks arrête et nettoie automatiquement les Jobs une fois qu'ils sont terminés, donc ces commandes ne sont pas nécessaires et doivent être supprimées.
Databricks met également automatiquement fin aux workloads Structured Streaming et les nettoie lors de la fin de l'exécution. Vous pouvez donc supprimer awaitTermination() et les commandes similaires des applications Structured Streaming. Voir Quand utiliser awaitTermination().
Faites confiance à Databricks pour configurer votre cluster
Databricks configure automatiquement tous les paramètres du driver et des exécuteurs de votre cluster de compute pour maximiser la résilience et l'utilisation des ressources. La fourniture de configurations personnalisées pour les exécuteurs ou la JVM peut entraîner une réduction des performances. Databricks recommande de ne définir que les configurations Spark nécessaires pour contrôler la gestion des types ou les fonctions afin que la logique reste cohérente.
Exécutez vos charges de travail
Maintenant que vous avez supprimé les modèles, les commandes et les paramètres susceptibles d'interférer avec l'exécution de Databricks, vous pouvez exécuter vos charges de travail dans un environnement de test et comparer les performances et les résultats à votre infrastructure existante. Bien que de nombreuses compétences que votre équipe a pu développer pour dépanner et améliorer les performances des charges de travail Apache Spark puissent toujours être exploitées sur Databricks, vous pouvez plus souvent obtenir de meilleurs résultats en améliorant les étapes pour utiliser les nouvelles fonctionnalités d'Apache Spark, de Delta Lake ou de produits Databricks personnalisés.