Hadoop 3: Comparaison avec Hadoop 2 et Spark

La sortie de Hadoop 3 en décembre 2017 a marqué le début d’une nouvelle ère pour la science des données. Le framework Hadoop est au cœur de tout l’écosystème Hadoop, et diverses autres librairies en dépendent fortement.

Dans cet article, nous discuterons des changements majeurs dans Hadoop 3 par rapport à Hadoop 2. Nous expliquerons également les différences entre Hadoop et Apache Spark, et vous conseillerons comment choisir le meilleur outil pour une tâche particulière.

Informations Générales

Hadoop 2 et Hadoop 3 sont des moteurs de traitement et de stockage de données écrits en Java et sortis respectivement en 2013 et 2017. Hadoop a été créé dans le but principal de maintenir l’analyse des données à partir d’un disque, appelé traitement par lots. Par conséquent, Hadoop natif ne prend pas en charge l’analyse et l’interactivité des données en temps réel.

Spark 2.X est un moteur de traitement et d’analyse écrit en Scala et sorti en 2016. L’analyse en temps réel des informations devenait cruciale, car de nombreux services Internet géants reposaient fortement sur la capacité de traiter les données immédiatement. Par conséquent, Apache Spark a été conçu, comme une alternative à Hadoop,  pour le traitement de données en direct. Il est maintenant populaire car il peut gérer efficacement les flux d’informations en direct et traiter les données en mode interactif.

Hadoop et Spark sont tous deux open source, sous licence Apache 2.

Niveau d’abstraction et difficulté à apprendre et à utiliser

L’une des principales différences entre ces frameworks est le niveau d’abstraction. Celui-ci est faible pour Hadoop et élevé pour Spark. Par conséquent, Hadoop est plus difficile à apprendre et à utiliser, car les développeurs doivent savoir coder de nombreuses opérations de base. Hadoop n’est que le moteur principal, donc l’utilisation de fonctionnalités avancées nécessite l’ajout d’autres composants, ce qui rend le système plus compliqué.

Contrairement à Hadoop, Apache Spark est un outil complet d’analyse de données. Il possède de nombreuses fonctions intégrées de haut niveau utiles qui fonctionnent avec les RDDs (Resilient Distributed Dataset) – le concept de base de Spark. Ce framework contient de nombreuses librairies incluses. Par exemple, MLlib permet d’utiliser l’apprentissage automatique, Spark SQL peut être utilisé pour effectuer des requêtes SQL, et GraphX pour le traitement des données de types graphes.

Matériel nécessaire et coût

Hadoop utilise massivement le stockage disque , il n’a donc pas besoin de beaucoup de mémoire RAM pour fonctionner. Cela peut être moins cher que d’avoir une grande mémoire RAM. Hadoop 3 nécessite moins d’espace disque que Hadoop 2 en raison des changements dans le système fournissant la tolérance aux pannes.

Spark a besoin de beaucoup de RAM pour fonctionner en mode mémoire, de sorte que le coût total peut être plus cher que Hadoop.

Prise en charge des langages de programmation

Les deux versions de Hadoop prennent en charge plusieurs langages de programmation en utilisant ‘Hadoop Streaming‘. Mais le langage principal est Java. Spark 2.X prend en charge Scala, Java, Python et R.

La vitesse

Généralement, Hadoop est plus lent que Spark, car il fonctionne sur disque. Hadoop ne peut pas mettre en cache les données en mémoire. Hadoop 3 peut fonctionner jusqu’à 30% plus vite que Hadoop 2 grâce à l’ajout de l’implémentation Java native du collecteur map output de MapReduce.

Spark peut traiter les informations en mémoire 100 fois plus rapidement que Hadoop. Si vous travaillez avec un disque, Spark est 10 fois plus rapide que Hadoop.

Sécurité

Hadoop est considéré comme plus sécurisé que Spark en raison de l’utilisation du Kerberos (protocole d’authentification de réseau informatique) et de la prise en charge des listes de contrôle d’accès (ACL). Spark à son tour ne fournit l’authentification qu’avec un mot de passe secret partagé.

Tolérance aux pannes

La tolérance aux pannes dans Hadoop 2 est fournie par la technique de réplication où chaque bloc d’informations est copié pour créer 2 réplicas (par défault). Cela signifie qu’au lieu de stocker 1 information, Hadoop 2 en stocke trois fois plus. Cela pose le problème du gaspillage de l’espace disque.

Dans Hadoop 3, la tolérance aux pannes est fournie par le codage d’effacement (erasure coding). Cette méthode permet de récupérer un bloc d’informations en utilisant l’autre bloc et le bloc de parité. Hadoop 3 crée un bloc de parité tous les deux blocs de données. Cela ne nécessite que 1,5 fois plus d’espace disque, contre 3 fois plus avec les réplications dans Hadoop 2. Le niveau de tolérance aux pannes dans Hadoop 3 reste le même, mais moins d’espace disque est nécessaire pour ses opérations.

Spark peut récupérer des informations par le recalcul du DAG (Directed Acyclic Graph). Le DAG est formé de sommets et d’arêtes. Les sommets représentent les RDD et les arêtes représentent les opérations sur les RDD. Dans le cas où une partie des données a été perdue, Spark peut la récupérer en appliquant la séquence d’opérations aux RDD. Notez qu’à chaque fois que vous aurez besoin de recalculer RDD, vous devrez attendre que Spark effectue tous les calculs nécessaires. Spark crée également des points de contrôle pour se protéger contre les pannes.

Version de YARN

Hadoop 2 utilise YARN version 1. YARN (Yet Another Resource Negotiator) est le gestionnaire de ressources. Il gère les ressources disponibles (CPU, mémoire, disque). En outre, YARN effectue la planification des travaux.

YARN a été mis à jour vers la version 2 dans Hadoop 3. Plusieurs modifications importantes ont été apportées pour améliorer la convivialité et l’évolutivité. YARN 2 prend en charge les flux – groupes logiques de l’application YARN et fournit des métriques d’agrégation au niveau des flux. La séparation entre les processus de collecte (écriture de données) et les processus de service (lecture de données) améliore l’évolutivité. De plus, YARN 2 utilise Apache HBase comme stockage de support principal.

Spark peut fonctionner indépendamment, sur un cluster avec YARN ou avec Mesos.

Nombre des NameNodes

Hadoop 2 prend en charge un seul NameNode actif et un seul NameNode de secours pour l’ensemble de l’espace de noms, tandis que Hadoop 3 fonctionne avec plusieurs NameNodes de secours.

Spark exécute le programme pilote (driver) sur le nœud maître qui gère SparkContext.

Systèmes de fichiers

Le système de fichiers principal de Hadoop 2 est HDFS (Hadoop Distributed File System). Le framework est également compatible avec plusieurs autres systèmes de fichiers comme le stockage des objets binaires (Blob), Amazon S3, le stockage MS Azure, tout comme d’autres systèmes de fichiers distribués.

Hadoop 3 prend en charge tous les systèmes de fichiers, comme Hadoop 2. De plus, Hadoop 3 est compatible avec Microsoft Azure Data Lake et Aliyun Object Storage System.

Spark prend en charge les systèmes de fichiers locaux, Amazon S3 et HDFS.

Conclusion

La principale différence entre Hadoop 3 et 2 est que la nouvelle version offre une meilleure optimisation et une meilleure convivialité, ainsi que certaines améliorations architecturales.

Spark et Hadoop diffèrent principalement par le niveau d’abstraction. Hadoop a été créé comme moteur de traitement de grandes quantités de données existantes. Il a un faible niveau d’abstraction qui permet d’effectuer des manipulations complexes mais peut entraîner des difficultés d’apprentissage et de gestion. Spark est plus simple et plus rapide, avec de nombreux outils et fonctions pratiques de haut niveau qui peuvent simplifier votre travail. Spark fonctionne sur Hadoop et dispose de nombreuses bonnes librairies comme Spark SQL ou la librairies d’apprentissage automatique MLlib. Pour résumer, si votre travail ne nécessite pas de fonctionnalités spéciales, Spark peut être le choix le plus raisonnable.