Une interprétation complète du Delta Engine des briques

Une interprétation complète du Delta Engine des briques

Mémoire du passé Big Data Mémoire du passé Big Data

Le premier jour de la réunion Spark AI Summit, DNB a publié le Delta Engine. Ce moteur est 100% compatible avec le moteur de requêtes vectorisées d'Apache Spark et utilise une architecture de processeur moderne pour optimiser l'optimiseur de requêtes et les fonctions de cache de Spark 3.0. Ces fonctionnalités améliorent considérablement les performances des requêtes de Delta Lake. Bien entendu, ce moteur n'est actuellement disponible que dans Databricks Runtime 7.0.

Le but du développement de Delta Engine

Au cours des dix dernières années, la vitesse de stockage est passée de 50 Mo / s (disque dur) à 16 Go / s (NvMe); la vitesse du réseau est passée de 1 Gbps à 100 Gbps; mais la fréquence du processeur est restée pratiquement inchangée de 3 GHz en 2010 à aujourd'hui. .
Une interprétation complète du Delta Engine des briques

Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

NVM Express (NVMe), ou spécification d'interface de contrôleur d'hôte de mémoire non volatile (en anglais: Spécification d'interface de contrôleur d'hôte de mémoire non volatile, abréviation: NVMHCIS), est une spécification d'interface de périphérique logique. Il s'agit d'une spécification de protocole de transmission de bus basée sur une interface logique de périphérique similaire à AHCI (équivalente à la couche application dans le protocole de communication), qui est utilisée pour accéder aux supports de mémoire non volatile connectés via le bus PCI Express (PCIe) (par exemple, utilisant un disque SSD rapide avec mémoire flash), bien que le protocole de bus PCIe ne soit pas nécessairement requis en théorie. Historiquement, la plupart des SSD utilisaient des interfaces telles que SATA, SAS ou Fibre Channel pour se connecter à un bus d'interface informatique. Avec la popularité des disques SSD sur le marché de masse, SATA est devenu le moyen le plus courant de connecter des SSD aux ordinateurs personnels; Cependant, SATA est principalement conçu comme une interface pour les disques durs mécaniques (HDD), et il est devenu de plus en plus plus au fil du temps.Il est difficile de répondre à la vitesse croissante du SSD. Avec la popularité sur le marché de masse, l'augmentation du débit de données de nombreux disques SSD a ralenti. Contrairement aux disques durs mécaniques, certains SSD sont déjà limités par le débit maximal du SATA.
Avant l'avènement de NVMe, les SSD haut de gamme ne pouvaient être fabriqués qu'en utilisant le bus PCI Express, mais ils devaient utiliser des interfaces non standard. Si une interface SSD standardisée est utilisée, le système d'exploitation n'a besoin que d'un seul pilote pour utiliser tous les SSD qui répondent aux spécifications. Cela signifie également que chaque fabricant de SSD n'a pas à utiliser de ressources supplémentaires pour concevoir des pilotes pour des interfaces spécifiques.

Extrait de https://zh.wikipedia.org/zh-hans/NVM_Express

Comme le montre la figure ci-dessus, la fréquence du processeur est un goulot d'étranglement important pour l'analyse actuelle des données.

De plus, à mesure que la vitesse de l'entreprise augmente, les équipes de données ont de moins en moins de temps pour modéliser correctement les données. Une mauvaise modélisation pour une meilleure agilité commerciale entraîne de mauvaises performances des requêtes. tel que

• La plupart des colonnes ne définissent pas «NOT NULL» • La chaîne est très pratique, de sorte que beaucoup de gens utilisent String pour stocker les dates • Les données deviennent de plus en plus irrégulières et les données sont constamment générées.

Delta Engine: moteur de requête hautes performances

Afin de résoudre certains des problèmes ci-dessus, Digital Brick a spécialement développé le moteur Delta, qui est spécialement utilisé pour accélérer l'analyse des données et s'adapter de manière flexible à une variété de charges de travail. On peut voir sur la figure ci-dessous que Delta Engine comprend principalement trois composants: un optimiseur de requête amélioré, une couche de cache entre la couche d'exécution et le stockage d'objets cloud, et un moteur d'exécution vectorisé natif (Photon) écrit en C ++, qui peut accélérer le utilisation de SQL et DataFrame pour analyser la charge de travail de Delta Lake.

Une interprétation complète du Delta Engine des briques
Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

L'optimiseur de requêtes de Delta Engine étend les fonctions existantes dans Spark 3.0, y compris l'optimiseur basé sur les coûts (CBO), l'exécution adaptative des requêtes (exécution adaptative des requêtes) et les filtres d'exécution dynamiques (filtres d'exécution dynamiques), fournissant des statistiques plus avancées jusqu'à 18 fois amélioration des performances des charges de travail en mode étoile.

La couche de cache de Delta Engine sélectionne automatiquement les données d'entrée à mettre en cache pour l'utilisateur et les transcode dans un format efficace pour le processeur afin de mieux utiliser la vitesse de stockage accrue des disques SSD NVMe. Cela offre jusqu'à 5 fois les performances d'analyse pour presque toutes les charges de travail. Il convient de noter que l'introduction de la mise en cache dans le moteur de calcul peut être observée dans de nombreux produits, tels que les produits d'entrepôt de données de Snowflake (voir l'article «L'entrepôt de données élastiques de Snowflake»), et en Chine, par exemple, de nombreux produits cloud de Alibaba Cloud poursuit également des développements dans ce domaine, tels que Data Lake Analysis (DLA) d'Alibaba Cloud.

La plus grande innovation de Delta Engine pour résoudre les défis auxquels sont confrontées les équipes de données est le moteur d'exécution natif, appelé Photon. Ce moteur est entièrement réécrit afin d'utiliser pleinement le matériel cloud moderne pour maximiser les performances de calcul. Ce moteur apporte des améliorations de performances pour tous les types de charges de travail. L'important est que ce moteur soit entièrement compatible avec l'API Spark open source.

Photon: moteur d'exécution vectorisé natif

Le photon le plus important dans Delta Engine est entièrement implémenté en C ++. Il améliore considérablement la puissance de calcul en utilisant le parallélisme au niveau des données et le parallélisme au niveau des instructions, améliore considérablement la requête Spark SQL sur le moteur Delta et fonctionne sur des travaux structurés et non structurés. Les charges sont optimisées à des degrés divers.

Bien que la fréquence principale du processeur n'ait pas changé depuis tant d'années, le degré de parallélisme a été amélioré à des degrés divers, notamment le parallélisme au niveau des données et le parallélisme au niveau de l'instruction.

Par exemple, notre requête est select sum (value) from table group by key. L'implémentation sous-jacente de cette requête devient le code suivant:


for(int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(keyCol[i]) % ht->size;

if(ht[bucket].key == keyCol[i]) {
        ht[bucket].value  += valueCol[i];
}
}

Le code ci-dessus accède à l'instruction mémoire (ht [bucket]) et au code de hachage de calcul (int32_t bucket = hash (keyCol [i])% ht-> size;), clé de comparaison (clé == keyCol [i]) et addition ( Les instructions Ht [bucket] .value + = valueCol [i];) sont mélangées. De plus, le corps de la boucle ci-dessus est très volumineux, ce qui fait que le processeur voit rarement les instructions d'accès à la mémoire. Pour résoudre le problème ci-dessus, vous devez modifier le grand corps de boucle ci-dessus en un corps de boucle plus petit, comme suit:


for(int32_t i = 0; i < batchSize; ++i) {
    buckets[i] = hash(keyCol[i]) % ht->size;
}

for(int32_t i = 0; i < batchSize; ++i) {
    keys[i] = ht[bucket].key;
}

for(int32_t i = 0; i < batchSize; ++i) {
if(keys[i] == keyCol[i]) {
        ht[buckets[i]].value  += valueCol[i];
}
}

Après la modification du niveau d'instruction ci-dessus, le moteur Delta avec Photon présente de nombreuses améliorations de performances par rapport au moteur traditionnel.

Une interprétation complète du Delta Engine des briques

Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

Les performances sous le test du volume de données TPC-DS 30 To ont été multipliées par 3,3.

Une interprétation complète du Delta Engine des briques
Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

Optimisation des chaînes

De plus, Photon a également effectué de nombreuses optimisations dans le traitement de String. Par exemple, après avoir utilisé C ++ pour implémenter le moteur d'exécution, les performances de fonctionnement des fonctions UPPER et SUBSTRING de String ont été considérablement améliorées par rapport à l'implémentation de JVM, comme suit:

Une interprétation complète du Delta Engine des briques

Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

Bien que les performances de la chaîne après la mise en œuvre de C ++ se soient améliorées par rapport aux performances de JVM, l'équipe de brique numérique a encore optimisé cela, combiné avec le codage de longueur variable UTF-8 et le codage de longueur fixe ASCII, ce qui améliore encore le fonctionnement de le moteur Photon sur cordes:

Une interprétation complète du Delta Engine des briques
Si vous souhaitez en savoir plus sur les articles liés à Spark, Hadoop ou HBase à temps, veuillez faire attention au compte public WeChat: iteblog_hadoop

Lien de référence

1. https://databricks.com/blog/2020/06/24/introducing-delta-engine.html

2. https://zh.wikipedia.org/zh-hans/NVM_Express

3. https://www.iteblog.com/archives/9833.html

Je suppose que tu aimes

Origine blog.51cto.com/15127589/2677642
conseillé
Classement