Améliorer les performances des charges de travail Apache Spark en utilisant le cache Azure HDInsight IO

Note

  • Le cache d’E/S était supporté jusqu’à Spark 2.3 et ne sera pas pris en charge dans Spark 2.4 (HDInsight 4.0) et Spark 3.1.2 (HDInsight 5.0)

IO Cache est un service de mise en cache de données pour Azure HDInsight qui améliore les performances des jobs Apache Spark. Le cache d’E/S fonctionne également avec les charges de travail Apache TEZ et Apache Hive, qui peuvent être exécutées sur des clusters Apache Spark. IO Cache utilise un composant de mise en cache open source appelé RubiX. RubiX est un cache disque local destiné à l’utilisation avec des moteurs d’analyse de big data qui accèdent aux données depuis des systèmes de stockage cloud. RubiX est unique parmi les systèmes de mise en cache, car il utilise des disques SSD plutôt que de réserver la mémoire vive à des fins de mise en cache. Le service de cache d’E/S lance et gère les serveurs de métadonnées RubiX sur chaque nœud de calcul du cluster. Il configure également tous les services du cluster pour une utilisation transparente du cache RubiX.

La plupart des SSD fournissent plus de 1 Gbyte par seconde de bande passante. Cette bande passante, complétée par le cache de fichiers en mémoire du système d’exploitation, fournit suffisamment de bande passante pour charger des moteurs de traitement de big data, tels qu’Apache Spark. La mémoire vive est laissée disponible afin de permettre à Apache Spark de traiter des tâches très gourmandes en mémoire, telles que les opérations de shuffle. Disposer d’une utilisation exclusive de la mémoire d’exploitation permet à Apache Spark d’atteindre une utilisation optimale des ressources.

Note

Le cache d’E/S utilise actuellement RubiX comme composant de mise en cache, mais cela pourrait changer dans les futures versions du service. Veuillez utiliser des interfaces de cache d’E/S et ne prenez aucune dépendance directement sur l’implémentation RubiX. Le cache d’E/S n’est actuellement pris en charge que par Azure BLOB Storage.

Avantages de Azure HDInsight IO Cache

L’utilisation d’IO Cache augmente les performances des travaux qui lisent les données depuis le stockage Blob Azure.

Vous n’avez pas besoin de modifier vos jobs Spark pour voir des améliorations de performance en utilisant le cache d’E/S. Lorsque le cache d’E/S est désactivé, ce code Spark lit à distance les données depuis Stockage Blob Azure : spark.read.load('wasbs:///myfolder/data.parquet').count(). Lorsque le cache d’E/S est activé, la même ligne de code entraîne une lecture en cache via le cache d’E/S. Lors des lectures suivantes, les données sont lues localement depuis le SSD. Les nœuds travailleurs du cluster HDInsight sont équipés de disques SSD dédiés connectés localement. Le cache HDInsight IO utilise ces SSD locaux pour la mise en cache, ce qui offre le niveau de latence le plus bas et maximise la bande passante.

Premiers pas

Le cache Azure HDInsight IO est désactivé par défaut dans l’aperçu. Le cache d’E/S est disponible sur les clusters Azure HDInsight 3.6+ Spark, qui exécutent Apache Spark 2.3. Pour activer le cache d’entrées sur HDInsight 4.0, suivez les étapes suivantes :

  1. À partir d’un navigateur web, accédez à https://CLUSTERNAME.azurehdinsight.net, où CLUSTERNAME est le nom de votre cluster.

  2. Sélectionnez le service de cache d’E/S à gauche.

  3. Sélectionnez les actions (actions de service dans HDI 3.6) et activez.

    Activation du service de cache d’E/S dans Ambari.

  4. Confirmez le redémarrage de tous les services affectés sur le cluster.

Note

Même si la barre de progression indique qu’il est activé, IO Cache n’est pas réellement activé tant que vous n’avez pas redémarré les autres services concernés.

Résolution des problèmes

Vous pouvez avoir des erreurs d’espace disque en exécutant des tâches Spark après avoir activé le cache d’E/S. Ces erreurs surviennent parce que Spark utilise également le stockage local sur disque pour stocker les données lors des opérations de mélange. Spark peut manquer d’espace SSD une fois le cache IO activé et l’espace de stockage Spark réduit. La quantité d’espace utilisée par le cache d’E/S correspond par défaut à la moitié de l’espace total du SSD. L’utilisation de l’espace disque pour le cache d’E/S est configurable dans Ambari. Si vous avez des erreurs d’espace disque, réduisez la quantité d’espace SSD utilisée pour le cache d’E/S et redémarrez le service. Pour changer l’espace défini pour le cache d’E/S, suivez les étapes suivantes :

  1. Dans Apache Ambari, sélectionnez le service HDFS à gauche.

  2. Sélectionnez les onglets Configurations et Avancé .

    Modification : Configuration avancée HDFS.

  3. Faites défiler vers le bas et développez la section core-site personnalisé.

  4. Localisez la propriété hadoop.cache.data.fullness.percentage.

  5. Modifiez la valeur dans le champ.

    Modifier le pourcentage de remplissage du cache d’E/S.

  6. Sélectionnez Enregistrer en haut à droite.

  7. Sélectionnez Redémarrer>Redémarrer Tous les affectés.

    Apache Ambari redémarre tous les éléments affectés.

  8. Sélectionnez Confirmer le redémarrage de tous.

Si cela ne marche pas, désactivez le cache d’E/S.