Étant donné que les entreprises dépendent de plus en plus des données pour gérer et développer leurs activités, et qu'elles veulent mettre en œuvre des cas pratiques de Machine Learning qui nécessitent une bonne infrastructure de données, le rôle d'un Data Engineer devient, de nos jours, plus que majeur.
Ce guide de recrutement couvre tout ce qu'il faut savoir sur le Data Engineering, pourquoi ce domaine est devenu si populaire, ce que fait un Data Engineer et comment recruter, avec succès, votre futur Data Engineer.
À propos du Data Engineering
Le Data Engineering est le processus de développement et de construction de systèmes de collecte, de stockage et d'analyse de données à grande échelle. C'est un vaste domaine qui intervient dans presque tous les secteurs d'activité. Les équipes de Data Engineers rassemblent et gèrent des données à grande échelle, en utilisant leurs connaissances et les meilleures technologies adéquates pour s'assurer que les données soient utilisables au moment où elles parviennent aux Data Scientists, les analystes et les autres consommateurs.
Les Data Engineers construisent des systèmes distribués qui collectent, traitent et convertissent les données brutes en informations exploitables par les équipes de Data Scientists, par les experts du Machine Learning et par ceux de l'intelligence économique, qui, par la suite, s'en servent pour diverses applications.
Les Data Engineers conçoivent et construisent des pipelines de données qui transforment et transportent de grandes quantités d'informations dans un format d'utilisation optimale avant qu'elles n'atteignent les utilisateurs finaux. Ces pipelines collectent généralement des données provenant de diverses sources et les stockent dans un Data warehouse ou un Data lake repository, unique, qui les représente uniformément comme une source d'information unique.
Le diagramme ci-dessus illustre le flux de travail d'une plateforme de données, les technologies couramment utilisées à chaque étape et l'étendue des responsabilités d'un Data Engineer. Comme vous pouvez le constater, il faut consacrer beaucoup de travail au Data Engineering avant que les données ne soient utilisées par les analystes BI ou par les Data Scientists. Des études ont montré qu'un pourcentage stupéfiant de 80 % de l'effort consacré aux projets axés sur les données concerne le Data Engineering pour que celles-ci soient prêtes à être utilisées, tandis que seulement 20 % concerne la création de valeur à partir de ces données.
Il n'est donc pas surprenant que, selon une enquête menée en 2021 par Stack Overflow, le salaire d'un Data Engineer s'élève à une somme annuelle de 68 034 dollars en moyenne, ce qui place ce métier dans la catégorie des métiers à hauts salaires.
Pourquoi et quand devez-vous engager un Data Engineer ?
Vous devez engager Data Engineer si vous cherchez à construire des applications ou des plates-formes de données (data warehouse, data lake) qui vous obligent à récupérer et à consolider des données provenant de diverses sources.
Ce besoin survient généralement lorsque vous faites face à un cas pratique de Machine Learning qui nécessite de grandes quantités de données ou lorsque vous avez besoin d'un référentiel centralisé qui vous permette de stocker toutes vos données structurées et non structurées, également connu sous le nom de data lake repository ou data warehouse.
Types de Data Engineers
Data Engineers centrés sur le Big Data
Un Big Data Engineer se concentre sur la manipulation de grands ensembles de données. Le stockage de données se fait généralement dans des systèmes de fichiers distribués ou dans des systèmes de stockage objet plutôt que dans des bases de données relationnelles. Pour traiter les quantités de données, un Big Data Engineer utilise des frameworks de traitement de données tels que Spark, MapReduce ou Flink. Même si SQL est fréquemment utilisé, la majeure partie de la programmation se fait dans des langages tels que Scala, Python ou Java, ce qui rend ce rôle plus semblable à celui d'un développeur backend. Le Big Data Engineer utilise généralement le processus ETL (Extract, Transform, Load) et construit des pipelines de données en batch et en streaming qui sont généralement mis en œuvre par des outils tels qu'Apache Airflow.
Ingénieur spécialisé en bases de données ou en data warehouses.
Le Data Engineer spécialisé en bases de données ou en data warehouses se concentre principalement sur l'extraction et la transformation de données structurées à partir de bases de données relationnelles. Le processus comprend l'utilisation d'un système de gestion de base de données standard, de méthodes et de logiques basées sur des tableaux, de serveurs de base de données et de procédures stockées.
Que fait un Data Engineer au quotidien ?
Les responsabilités et les tâches d'un Data Engineer comprennent généralement :
- Identification et mise en œuvre des reconceptions de l'infrastructure pour l'extensibilité
- Optimisation de la livraison des données
- Assemblage de grands ensembles de données
- Construction d'une infrastructure pour l'extraction et le chargement des données
- Création d'outils analytiques pour le pipeline de données et fourniture d'informations pour l'efficacité opérationnelle.
Nous avons également demandé à Mehmet Ozan Ünal, Data Engineer chez Proxify, quelles étaient les tâches quotidiennes liées à ce poste et il a déclaré :
"Les Data Engineers créent généralement des pipelines ETL, conçoivent des schémas, surveillent et planifient les pipelines. Une autre responsabilité cruciale consiste à concevoir et à mettre en forme les infrastructures de données de l'entreprise. Un Data Engineer doit faire le lien entre les sources de données (par exemple SAP), également l'IoT (Internet des objets) et les données des apps) et les consommateurs de données (Data Analysts, Data Scientists, commerciaux, pipelines de Machine Learning, business intelligence (BI) et systèmes de reporting)."
Mehmet Ozan Ünal
En un mot, le rôle d'un Data Engineer est le suivant :
- Développer et maintenir des plateformes de données
- Analyser, de façon approfondie, des données brutes
- Améliorer la qualité et l'efficacité de toutes les données
- Développer et tester des architectures d'extraction et de transformation des données
- Construire des pipelines de données
- Construire des algorithmes pour traiter efficacement les données
- Rechercher des méthodes pour la fiabilité des données
- Soutenir le développement d'outils analytiques.
Entretien avec un Data Engineer
Technologies et langages de programmation essentiels pour un Data Engineer
Mehmet énumère les principales technologies qu'un Data Engineer doit connaître :
- Langages de programmation : SQL et Python, Scala ou Java.
- Outils et systèmes : Kafka, Spark, Apache Airflow (pour l'orchestration de pipelines de données), bases de données transactionnelles (MySQL, PostgreSQL), formats de données (Parquet, Protobuf, Avro), codage : Gestion des versions (Git), algorithmes et structures de données.
- Conteneurisation : Systèmes CI/CD et Docker.
- Cloud : Azure, GCP ou AWS.
Principaux outils que votre Data Engineer doit connaître
Il existe des outils spécifiques qui rendent le Data Engineering plus efficace. Les cinq principaux sont les suivants :
1. Data warehouses :
- Amazon Redshift : Un data warehouse en version cloud pour une configuration et une mise à l'échelle faciles des données.
- Google Big Query : Un data warehouse en cloud, idéal pour les petites entreprises en démarrage qui souhaitent évoluer.
- Snowflake : Un SaaS entièrement géré, fournissant une plateforme unique pour des objectifs multiples tels que le Data Engineering, les data lakes, le data warehousing, le développement d'applications de données, etc.
- Apache Spark : Un moteur analytique open-source, utilisé pour traiter des données à grande échelle. C'est un projet open-source mais il est également disponible sous la forme d'une distribution web, créée par les fondateurs de Spark appelée Databricks.
- Google Cloud Data Fusion : Une interface web pour la création de solutions d'intégration de données évolutives, afin de préparer et de transformer les données, sans avoir à en modifier l'infrastructure.
- Azure Data Factory : Un service ETL (Extract, Transform, Load) d'Azure pour la création de flux de données et de données d'intégration sans avoir à utiliser de serveur.
- Dbt : Data Build Tool, un outil permettant de transformer les données directement dans le data warehouse, grâce à l'utilisation de code pour l'ensemble du processus.
4. Data Lake et Lakehouse :
- Databricks : Une plateforme unifiée, ouverte et utilisée pour toutes les données, précisément pour les analyses de données programmées et interactives.
- Amazon S3 : Un service pour le stockage d'objets et l'extensibilité, la performance et la sécurité des données qui sont stockées sous un format objet.
- Google Cloud storage : Service de Google permettant de stocker des objets et des données dans le cloud de Google.
- Azure Data Lake : Faisant partie de Microsoft, l'Azure Data Lake est une plateforme publique proposant des services et des produits pour l'analyse des big data.
5. Orchestrateurs de flux de travail :
- Apache Airflow : Un outil WMS (système de gestion des flux de travail) open-source pour organiser, planifier et surveiller les flux de travail.
- Luigi : Un package d'outils Python pour construire, planifier et orchestrer des pipelines.
6. Traitement des événements et des flux :
- Google Cloud Pub/Sub : Messagerie avec alertes et notifications rapides et immédiates, permettant un traitement parallèle et des architectures axées sur les événements.
- Apache Kafka : Un magasin d'événements et une plateforme open-source pour les actions de traitement de flux.
Compétences techniques d'un Data Engineer
Un Data Engineer doit posséder ces compétences techniques essentielles :
- Collecte des données – gérer le volume des données mais aussi leur variété et leur rapidité.
- Codage – la maîtrise de la programmation est essentielle. De ce fait, ces candidats doivent donc avoir une excellente maîtrise de Scala, de Java ou de Python, qui sont les langages les plus couramment utilisés pour les systèmes et frameworks de Data Engineering.
- Transformation des données – le Data Engineer doit avoir une bonne connaissance de la transformation, par exemple du nettoyage (suppression des doublons), de l'assemblage de données et de l'agrégation de données.
- Data warehousing : savoir comment diviser le DW en niveaux et comment créer des tables de faits en combinant des tables et en les agrégeant pour rendre le reporting plus efficace.
- Data analysis : savoir comment tirer des informations (conclusions) d'un ensemble de données, notamment en ce qui concerne les contrôles de qualité; par exemple la distribution de données, les contrôles de doublons, etc.
De plus, Mehmet a dit :
"Un bon Data Engineer doit avoir des connaissances pratiques et une expérience du codage et du data warehousing. En plus de cela, il doit avoir des connaissances de base en Machine Learning, en modélisation de données, ainsi qu'en Linux et en Shell Script."
Principales questions d'entretien (et réponses) pour évaluer les Data Engineers
Une excellente approche pour évaluer les capacités techniques du candidat consiste à poser des questions spécifiques au Data Engineering qui vous aideront à séparer le bon grain de l'ivraie. En vue d'évaluer les compétences et l'expertise d'un Data Engineer pour recruter le meilleur candidat, vous pouvez poser les questions suivantes :
- Dites ce que vous savez sur Hadoop et ses composants.
Réponse attendue : Hadoop est un framework open-source, utilisé pour le stockage et le traitement pratiques et efficaces de grands ensembles de données. Ces grands ensembles peuvent varier de la taille d'un gigaoctet à celle d'un pétaoctet et Hadoop permet un regroupement simplifié de ces grands volumes.
Initialement, il y a quatre composantes (1 de base/commune + 3 de base) et des composantes supplémentaires approfondies, comme expliqué ci-dessous.
- Hadoop Common – L'ensemble des bibliothèques Hadoop standard et de base.
- Hadoop MapReduce – Pour le traitement de données à grande échelle.
- Hadoop YARN – Pour la gestion des ressources ainsi que la planification des tâches.
- HDFS – Système de fichiers distribués Hadoop.
Ensuite, nous utilisons aussi :
- Hive et Pig – pour l'accès aux données
- Apache Flume, Chukwa, Sqoop – pour l'intégration des données
- HBase – pour le stockage des données
- Avro et Thrift – pour la stérilisation des données
- Drill et Apache Mahout – pour l'intelligence des données
- Oozie, Zookeeper et Ambari – pour la gestion, l'orchestration et la surveillance des données.
- Qu'est-ce qui distingue un scanner de bloc d'un scanner de bloc HDFS ?
Réponse attendue : Les blocs dans HDFS sont des fichiers de données qui ont la plus petite taille possible. Ils résultent du fractionnement de fichiers de taille énorme par Hadoop.
Le scanner de blocs nous aide à suivre les listes contenant les blocs et à identifier les problèmes de somme de contrôle (checksum) par le biais du throttling (exécution d'une fonction une seule fois, sans tenir compte des répétitions d'événements).
- Expliquez ce qu'est Reducer et ses principales méthodes.
Réponse attendue : Durant le traitement des données dans Hadoop, le Mapper est la deuxième étape et le Reducer en constitue la troisième.
Reducer dispose de trois méthodes principales :
- setup() – Avec cette commande, nous pouvons facilement gérer les paramètres, le cache et spécifier la taille des données d'entrée.
- cleanup() – Cette fonction permet de supprimer les fichiers qui sont temporaires.
- reduce() – Nous pouvons appeler cette fonction une seule fois pour chaque clé de tâche, et c'est l'essence de Reducer.
- À quoi servent "args" et "kwargs" ?
Réponse attendue : args et kwargs sont toutes deux des fonctions. Si nous devons spécifier et utiliser une fonction dans une ligne de commande et un ordre, nous utilisons * args. Sinon, si nous devons indiquer un groupe d'arguments en ligne, non ordonnés, qui passent aux fonctions, nous utilisons ** kwargs.
- Comparez Star Schema et Snowflake Schema.
Réponse attendue : En modélisation de données, il existe deux types de schémas de conception, le schéma en étoile (Star Schema) et le schéma en flocon de neige (Snowflake Schema).
-
Star Schema dénormalise les dimensions ou la répétition des valeurs en une seule table; l'écriture des requêtes est facile, sans avoir besoin d'écrire plus de "joins". Il est également facile à mettre en place et à concevoir. Avec Star Schema, nous avons des données redondantes stockées dans des tables de dimensions. En ce qui concerne l'espace de stockage, Star Schema en nécessite davantage par rapport à Snowflake Schema, pour la réalisation de performances rapides.
-
Snowflake Schema possède une structure de données normalisée avec des hiérarchies pour les dimensions, qui sont présentées de manière ordonnée, dans des tables séparées. Par ailleurs, ce schéma est plus complexe que Star pour la maintenance globale. Avec Snowflake, l'écriture des requêtes n'est pas simplifiée et nous avons besoin de plus de joins pour relier les tables supplémentaires. Il permet d'éviter les données redondantes. Les tables de dimension sont normalisées. Avec Snowflake Schema, grâce au facteur de redondance, pas besoin d'un grand espace de stockage grâce au facteur de redondance (l'espace utilisé est plus important dans Star, ci-dessus).
- Expliquez ce qu'est Secondary NameNode et parlez-nous de ses fonctions.
Réponse attendue : Secondary NameCode est utilisé pour recevoir les journaux des modifications apportées par un NameCode spécifique. Cela nous permet de fixer et de maintenir une limite à la taille du journal des modifications.
Les fonctions de Secondary NameNode sont les suivantes :
- Checkpoint – Nous l'utilisons pour confirmer et nous assurer que nous n'avons pas de données corrompues.
- FsImage – Nous l'utilisons si nous devons enregistrer une copie FsImage ou un fichier EditLog.
- Update – Pour un processus automatique de mise à jour des fichiers FsImage et EditLog, nous utilisons Update.
- NameNode crash – Si NameNode échoue et se plante, nous pouvons recréer NameNode en utilisant FsImage.
- Pouvez-vous énumérer et développer les différentes approches de la validation de données ?
Réponse attendue : Les approches de validation de données (data validation) nous permettent de vérifier les points suivants :
- Données – Le contrôle du type de données permet de vérifier l'exactitude des données. Ainsi, par exemple, nous ne pourrions pas utiliser des données basées sur des lettres dans un champ qui n'accepterait que des données basées sur des chiffres.
- Plage – Nous effectuons une vérification de plage lorsque nous devons vérifier si une plage prédéfinie contient des données d'entrée.
- Code : lorsque nous sélectionnons un champ particulier dans une liste de valeurs, nous devons nous assurer que cette liste est valide et que le formatage de ce champ est correct. Pour ce faire, nous effectuons une vérification du code.
- Format – Il arrive de rencontrer des structures prédéfinies avec de nombreux types de données. Avec un contrôle de format, nous vérifions si toutes les dates sont dans un format correct (JJ/MM/AAAA ou AAAA/MM/JJ, par exemple).
- Unicité – Grâce à un contrôle d'unicité, nous nous assurons qu'il n'y a pas d'entrées répétitives d'éléments qui doivent être uniques par nature, comme l'adresse électronique ou le contenu de l'identifiant.
- Cohérence (consistency) – Dans le cadre d'un contrôle de cohérence, nous vérifions si nous nous appuyons sur une logique en saisissant des données avec un ordre et une hiérarchie clairs des éléments. Par exemple, la "date de production" d'un produit doit être suivie de la "date de sortie", et non l'inverse.
- Que représente DAG dans Apache Spark ?
Réponse attendue : Le DAG (Directed Acrylic Graph) représente un ensemble de sommets utilisé pour les interprétations de code. C'est un graphe qui stocke et présente chaque opération sur le RDD, et c'est un excellent moyen de créer et de gérer le flux des opérations. Il offre un ordre et un séquençage topologiques, ainsi qu'une présentation visuelle soignée des RDD.
- Qu'est-ce que Spark "lazy evaluation" ?
Réponse attendue : "Spark Lazy evaluation" représente un processus dont la condition de réalisation est que l'action doit être appelée, sinon, aucun processus ne sera exécuté. Par conséquent, Spark n'est pas trop actif lorsque nous travaillons sur des transformations, mais lorsque nous appelons une action, un DAG (Directed Acrylic Graph) est créé. Naturellement, toutes les transformations sont lentes et "paresseuses". Donc, les opérations dans le RDD ne commencent pas immédiatement. C'est à ce moment-là que Spark est utile : il envoie les transformations à un DAG qui s'exécutera lorsqu'il y aura une demande de données par un pilote.
- En quoi Spark est-il différent de Hadoop MapReduce ?
Réponse attendue : Spark est un outil servant pour la manipulation de pipeline de données. C'est un système open-source de traitement distribué, utilisé pour travailler avec des données volumineuses. Hadoop MapReduce est un framework pour l'écriture simplifiée d'applications qui traitent un grand nombre de données. Ensuite, lorsque nous comparons Spark à Hadoop MapReduce, nous remarquons que Mapreduce traite les données sur le disque, alors que Spark traite les données en mémoire, et les conserve là aussi. De plus, comparé à Spark, MapReduce est plus lent en termes de vitesse de traitement.
- Quelle est la différence entre left, right et inner join ?
Réponse attendue : Left, Right, and Inner join sont tous des mots-clés en SQL, utilisés pour combiner des lignes en deux tables minimum ou plus, et quand elles ont une colonne commune quelque part entre elles.
- Inner join – Utilisé pour sélectionner toutes les lignes des tables. Ce mot-clé combine les lignes des tables qui ont la même valeur de champ commun identique.
- Left join – Ce mot-clé positionne les lignes de la table à gauche du "join", et synchronise également les lignes de la table de droite.
- Right join – Ce mot-clé ramène les lignes de la table qui est à droite du "join", mais synchronise également les lignes de la table de gauche. Il est assez similaire à left join.
- Pouvez-vous définir la normalisation des données ?
Réponse attendue : Le processus de création de données propres est généralement connu sous le nom de normalisation des données; c'est-à-dire, l'organisation des données et la définition de leur format unifié dans plusieurs champs et enregistrements. La normalisation des données contribue à supprimer les données non structurées ou dupliquées, ne laissant ainsi que des données logiques et utilisées.
Défis possibles lors de l'embauche d'un Data Engineer
Le recrutement d'une nouvelle personne comporte toujours des défis, selon la vocation et les exigences du poste.
L'un des principaux défis est que le champ d'action du Data Engineer est devenu vaste et complexe. Il ne faut pas le confondre avec les rôles connexes suivants :
- Administrateur de bases de données (DBA), qui se concentre davantage sur la création et l'optimisation des bases de données OLTP.
- Data Analysts, qui se concentrent généralement davantage sur la création de valeur commerciale en créant des tableaux de bord et des rapports ad hoc.
- Analytics Engineer, dont le rôle est similaire à celui d'un Data Engineer, mais qui possède davantage les compétences d'un software engineer (contrôle de version, CI/CD, utilisation de Python/Scala/Java) et qui se concentre généralement sur le data warehousing, les pipelines SQL et l'optimisation.
- Machine Learning Engineer qui est compétent pour déployer en production, des modèles ML construits par des Data Scientists. Cela nécessite une compréhension plus approfondie des statistiques, des algo et des mathématiques. Certains Data Engineers possèdent ces connaissances, mais pour une équipe de spécialistes de données de taille moyenne à grande, cela devrait constituer un rôle à part entière.
Il convient de souligner que les gestionnaires de recrutement/employeurs ont souvent l'habitude d'offrir aux Data Engineers, un salaire plus bas, ou en d'autres termes, un salaire inférieur à la valeur du marché. Ce type de "défi" provient du côté des responsables du recrutement, qui se concentrent à tort sur tout sauf l'avantage à long terme que représente la présence d'un Data Engineer compétent dans l'entreprise.
Qu'est-ce qui distingue un excellent Data Engineer d'un bon ?
Ça peut être délicat de sélectionner le meilleur candidat pour le poste de Data Engineer, surtout si au moins deux candidats ont un niveau d'expérience et une expertise similaires. Toutefois, l'un d'entre eux se distinguera toujours par ses connaissances approfondies, sa maîtrise des compétences techniques et son mode de pensée proactif et dynamique.
Le bon Data Engineer remplit les points suivants :
-
Créer des solutions faciles à maintenir.
Par exemple, si un mappage manuel des données est nécessaire pour les nettoyer, le développeur doit-il codifier les valeurs en dur ou doit-il créer un fichier de configuration qui peut être facilement mis à jour ?
-
Comprendre les besoins de l'entreprise et ne pas sur-ingénier les solutions
Il est facile de tomber dans le piège de construire des solutions plus complexes que nécessaire. Il peut s'agir, par exemple, de construire un pipeline de streaming en temps quasi réel alors que le besoin réel de rafraîchissement des données est quotidien.
N'oublions pas qu'il est particulièrement important d'avoir l'esprit d'équipe car un Data Engineer devra communiquer régulièrement avec les autres membres de l'équipe qui auront des rôles différents (Data Scientist, Data Analyst, ML Engineer, etc.) et les autres équipes de l'entreprise.
Importance du Data Engineering
Toute entreprise peut tirer profit du Data Engineering, car il permet aux entreprises d'être davantage axées sur les données. Cela peut sembler vague mais le Data Engineering est la base dont vous avez besoin pour faciliter l'utilisation et la précision de vos données. De plus, il permet des analyses avancées et des cas pratiques de Machine Learning. Comme nous l'avons mentionné plus haut, 80 % de l'effort de tout projet de données est consacré au Data Engineering.
En résumé, Mehmet explique :
"Les Data Engineers sont chargés de concevoir le flux global de données à travers l'entreprise ainsi que de créer et automatiser les pipelines de données de sorte à mettre en œuvre ce flux."
Avec une telle personne ou une telle équipe, une entreprise peut faire confiance à ses données et savoir qu'elles sont entre de bonnes mains. Ces Data Engineers collecteront, stockeront et traiteront les données de manière irréprochable; ce qui constitue la première étape pour devenir une entreprise prometteuse, basée sur les données.