Scénario : Compter des mots à l'aide de composants Map/Reduce - 6.1

Talend Real-time Big Data Platform Guide de prise en main

EnrichVersion
6.1
EnrichProdName
Talend Real-Time Big Data Platform
task
Création et développement
Qualité et préparation de données
EnrichPlatform
Studio Talend

En s'inspirant de l'exemple de Map/Reduce donné dans la documentation d'Apache disponible sur leur site Internet http://wiki.apache.org/hadoop/WordCount (en anglais), ce scénario montre comment un Job Map/Reduce Talend vous évite de tout devoir programmer en générant du code Map/Reduce natif, vous permettant ainsi d'accomplir plus de tâches.

Les données d'exemple utilisées dans ce scénario se présentent comme suit :

Hello World Bye World
Hello Hadoop Goodbye Hadoop
			 

Avant de commencer ce scénario, assurez-vous de disposer des droits d'accès nécessaires pour accéder à la distribution Hadoop utilisée. Procédez ensuite comme suit :

Relier les composants

  1. Dans l'espace de modélisation graphique du Job vide créé en suivant la procédure décrite dans Créer un Job MapReduce, saisissez le nom des composants à utiliser et sélectionnez les composants souhaités dans la liste qui s'affiche. Les composants à utiliser sont le tHDFSInput, le tNormalize, le tAggregateRow, le tMap et le tMysqlOutput.

    Le tHDFSInput lit les données de la distribution Hadoop utilisée et le tMysqlOutput les écrit dans une base de données MySQL.

    Parmi les composants de transformation, le tNormalize sépare les entrées en mots, le tAggregateRow compte le nombre d'occurrences de chaque mot et le tMap met les mots en majuscules.

  2. Reliez ces composants à l'aide de liens Row > Main.

Configurer une connexion Hadoop

  1. Cliquez sur Run afin d'ouvrir la vue correspondante et cliquez sur l'onglet Hadoop Configuration afin d'afficher cette vue et configurer la connexion Hadoop pour ce Job.

    La vue se présente comme dans la capture d'écran ci-dessous :

  2. Dans la liste Property type, sélectionnez Built-in. Si vous avez créé une connexion afin qu'elle soit utilisable depuis le Repository, sélectionnez alors Repository afin que le Studio Talend réutilise les informations de connexion pour ce Job.

    Pour plus d'informations concernant la création d'une connexion Hadoop dans le Repository, consultez le chapitre décrivant le nœud Hadoop cluster du le Guide utilisateur du Studio Talend.

  3. Dans la zone Version, sélectionnez la distribution Hadoop à utiliser et sa version. Si vous ne trouvez pas la distribution correspondant à la votre dans la liste, sélectionnez Custom afin de vous connecter à une distribution Hadoop non officiellement supportée par le Studio Talend.

    En plus de l'évolution de Hadoop, veuillez noter les changements suivants :

    • Si vous utilisez Hortonworks Data Platform V2.2, les fichiers de configuration de votre cluster peuvent utiliser des variables d'environnement comme ${hdp.version}. Si vous êtes dans cette situation, vous devez configurer la propriété mapreduce.application.framework.path dans la table Hadoop properties, avec la valeur du chemin d'accès pointant explicitement vers l'archive du framework MapReduce de votre cluster. Par exemple :

      mapreduce.application.framework.path=/hdp/apps/2.2.0.0-2041/mapreduce/mapreduce.tar.gz#mr-framework
    • Si vous utilisez Hortonworks Data Platform V2.0.0, le type de système d'exploitation utilisé pour la distribution Hadoop et pour le Job Talend doit être identique, par exemple Windows ou Linux. Sinon, vous devez utiliser le Jobserver de Talend afin d'exécuter un Job dans le même type de système d'exploitation que celui dans lequel la distribution Hortonworks Data Platform V2.0.0 utilisée est exécutée. Pour plus d'informations concernant le Jobserver de Talend, consultez le Guide d'installation Talend.

  4. Dans le champ Name node, saisissez l'emplacement du nœud maître, le NameNode, de la distribution utilisée. Par exemple, hdfs://tal-qa113.talend.lan:8020.

    Si vous utilisez une distribution MapR, vous pouvez simplement laisser maprfs:/// dans ce champ. Le client MapR se charge de créer la connexion au moment de l'exécution. Notez que le client doit être correctement installé. Pour plus d'informations concernant la configuration d'un client MapR, consultez la page suivante sur le site de la documentation de MapR : http://doc.mapr.com/display/MapR/Setting+Up+the+Client (en anglais).

  5. Dans le champ Job tracker, saisissez l'emplacement du JobTracker de votre distribution. Par exemple, tal-qa114.talend.lan:8050.

    Notez que le mot "Job" dans le terme "JobTracker" désigne les Jobs MR ou Map/Reduce décrits dans la documentation Apache disponible sur le site Internet d'Apache http://hadoop.apache.org/ (en anglais).

    Si vous utilisez YARN dans votre cluster Hadoop, comme Hortonworks Data Platform V2.0.0 ou Cloudera CDH4.3 + (mode YARN), vous devez spécifier l'emplacement du Resource Manager et non celui du Jobtracker. Vous pouvez continuer à configurer les paramètres suivants selon la configuration du cluster Hadoop à utiliser :

    • Cochez la case Set resourcemanager scheduler address et saisissez l'adresse de l'ordonnanceur (Scheduler) dans le champ qui apparaît.

    • Cochez la case Set jobhistory address et saisissez l'emplacement du serveur JobHistory du cluster Hadoop à utiliser. Cela permet de stocker les informations relatives aux métriques du Job courant sur le serveur JobHistory.

    • Cochez la case Set staging directory et saisissez le chemin d'accès au répertoire défini dans votre cluster Hadoop pour les fichiers temporaires créés par l'exécution de programmes. Ce répertoire se trouve sous la propriété yarn.app.mapreduce.am.staging-dir dans les fichiers de configuration, notamment les fichiers yarn-site.xml et mapred-site.xml de votre distribution.

    • Cochez la case Use datanode hostname pour permettre au Job d'accéder aux nœuds de données via leurs hébergeurs. Cela configure la propriété dfs.client.use.datanode.hostname à true. Lorsque vous vous connectez à un système de fichiers S3N, vous devez cocher cette case.

  6. Si la distribution utilisée nécessite une authentification Kerberos, cochez la case Use Kerberos authentication et saisissez les détails d'authentification. Sinon, laissez cette case décochée.

    Si vous accédez au cluster Hadoop fonctionnant avec la sécurité de Kerberos, cochez cette case, puis saisissez le "principal name" de Kerberos pour le NameNode dans le champ affiché. Cela vous permet d'utiliser votre identifiant pour vous authentifier, en le comparant aux identifiants stockés dans Kerberos.

    De plus, comme ce composant effectue des calculs Map/Reduce, vous devez également authentifier les services associés, comme le serveur de l'historique des Jobs et le gestionnaire de ressources ou le JobTracker, selon votre distribution, dans le champ correspondant. Ces principaux se trouvent dans les fichiers de configuration de votre distribution. Par exemple, dans une distribution CDH4, le principal du gestionnaire de ressource est configuré dans le fichier yarn-site.xml et le principal de l'historique des Job dans le fichier mapred-site.xml.

    Si vous souhaitez utiliser un fichier Kerberos keytab pour vous identifier, cochez la case Use a keytab to authenticate. Un fichier keytab contient des paires de principaux et clés cryptées Kerberos. Vous devez saisir le principal à utiliser dans le champ Principal et le chemin d'accès au fichier keytab dans le champ Keytab.

    Notez que l'utilisateur qui exécute un Job utilisant un keytab n'est pas forcément celui désigné par le principal mais qu'il doit avoir le droit de lecture pour le fichier keytab utilisé. Par exemple, le nom d'utilisateur que vous utilisez pour exécuter le Job est user1 et le principal à utiliser est guest. Dans cette situation, assurez-vous que user1 a les droits de lecture pour le fichier keytab à utiliser.

  7. Dans le champ User name, saisissez votre nom d'utilisateur pour votre distribution. Si vous laissez ce champ vierge, le nom d'utilisateur de la machine hébergeant le Studio Talend est utilisé.

  8. Dans le champ Temp folder, saisissez le chemin d'accès au dossier HDFS dans lequel sont stockés les fichiers temporaires générés pendant les opérations de Map/Reduce.

  9. Laissez le champ Path separator in server tel quel, sauf si vous changez le séparateur utilisé par la machine hôte de votre distribution Hadoop pour sa variable PATH. En d'autres termes, changez le séparateur si celui-ci n'est pas le signe deux points (:). Dans ce cas, vous devez remplacer cette valeur par celle utilisée dans votre hôte.

  10. Laissez la case Clear temporary folder (Effacer le contenu du dossier temporaire) cochée, sauf si vous souhaitez garder ces fichiers temporaires.

  11. Laissez la case Compress intermediate map output to reduce network traffic cochée, afin de réduire le temps de transfert des partitions du Mapper aux différents Reducers.

    Cependant, si le transfert des données dans le Job est négligeable, il est recommandé de décocher cette case afin de désactiver l'étape de compression, car la compression consomme des ressources supplémentaires du CPU.

  12. Si vous souhaitez utiliser des propriétés Hadoop personnalisées, renseignez la table Hadoop properties avec la ou les propriété(s) à personnaliser. Lors de l'exécution, ces modifications écrasent les propriétés correspondantes par défaut utilisées par le Studio pour son moteur Hadoop.

    Pour plus d'informations concernant les propriétés requises par Hadoop, consultez la documentation Apache Hadoop sur le site http://hadoop.apache.org (en anglais), ou la documentation de la distribution Hadoop que vous utilisez.

  13. Si le système Hadoop utilisé est Hortonworks Data Platform V1.2 ou Hortonworks Data Platform V1.3, vous devez définir des allocations de mémoire suffisantes pour que les opérations de map et reduce soient effectuées par le système Hadoop.

    Dans ce cas, vous devez saisir les valeurs que vous souhaitez utiliser pour la mémoire allouée aux opérations map et reduce dans les champs Mapred job map memory mb et Mapred job reduce memory mb, respectivement. Par défaut, les valeurs sont toutes les deux 1000, ce qui est normalement adapté pour l'exécution de ces opérations.

    Si la distribution utilisée est YARN, les paramètres de mémoire à définir sont alors Map (in Mb), Reduce (in Mb) et ApplicationMaster (in Mb), respectivement. Ces champs permettent d'allouer dynamiquement de la mémoire aux opérations map et reduce et à l'ApplicationMaster de YARN.

Pour plus d'informations sur le Resource Manager, son ordonnanceur et l'ApplicationMaster, consultez la documentation de YARN sur le site http://hortonworks.com/blog/apache-hadoop-yarn-concepts-and-applications/ (en anglais).

Pour plus d'informations concernant la définition des paramètres de mémoire pour YARN et MapReduce, consultez la documentation de la distribution utilisée comme, par exemple, celle d'Hortonworks : http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html (en anglais).

Configurer le tHDFSInput

  1. Double-cliquez sur le tHDFSInput pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] situé à côté du champ Edit schema afin d'ouvrir l'éditeur de schéma.

  3. Cliquez sur le bouton [+] pour ajouter une ligne. Dans la colonne Column, renommez-la, par exemple, line. Dans la colonne Length, saisissez 250.

  4. Cliquez sur OK pour valider vos changements, puis acceptez la propagation proposée par la boîte de dialogue qui s'affiche.

  5. Dans le champ Folder/File, saisissez le chemin d'accès au fichier source que vous souhaitez que le Job lise. Vous pouvez également parcourir votre système de fichiers afin de définir ce chemin.

    Si le fichier ne se trouve pas dans le système HDFS utilisé, vous devez le placer dans le système HDFS. Pour cela, vous pouvez par exemple utiliser le tFileInputDelimited et le tHDFSOutput dans un Job Standard. Pour plus d'informations sur ces composants, consultez le Guide de référence des Composants Talend.

Séparer les entrées en mots

  1. Double-cliquez sur le tNormalize pour ouvrir sa vue Component.

  2. Dans la liste Column to normalize, sélectionnez line afin que le composant sépare les entrées de cette colonne en mots.

Compter le nombre d'occurrences des mots

  1. Double-cliquez sur le tAggregateRow pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] situé à côté du champ Edit schema afin d'ouvrir l'éditeur de schéma.

  3. Dans la partie du tAggregateRow, renommez la colonne existante en word et cliquez sur le bouton [+] afin d'ajouter une autre colonne. Nommez-la wordcount. Le schéma contient donc deux lignes : word et wordcount.

  4. Cliquez sur OK pour valider vos changements puis acceptez la propagation proposée par la boîte de dialogue qui s'affiche.

  5. Sous le champ Group by, cliquez sur le bouton [+] afin d'ajouter une ligne.

  6. Dans la colonne Output column, sélectionnez word. Dans la colonne Input column position, sélectionnez line. Cela signifie que l'agrégation se base sur la colonne word et que les valeurs viennent de la colonne line.

  7. Sous la table Operations, cliquez sur le bouton [+] afin d'ajouter une ligne.

  8. Dans la colonne Output column, sélectionnez wordcount. Dans la colonne Function, sélectionnez count. Enfin, dans la colonne Input column position, sélectionnez line. Cela permet au Job de compter le nombre d'occurrences des mots de la colonne line et d'écrire les résultats dans la colonne wordcount.

Changer la casse

  1. Double-cliquez sur le tMap pour ouvrir le Mapper.

  2. Déposez les colonnes word et wordcount du côté d'entrée (gauche) dans la colonne Expression de la colonne de sortie (right). Chacune de ces colonnes correspond à la colonne de sortie que vous devez mapper. Dans cet exemple, la colonne word est mappée avec la colonne word et wordcount avec wordcount.

  3. Dans la colonne Expression, cliquez sur la ligne word, puis cliquez sur le bouton [...] pour ouvrir la vue Expression builder.

  4. Dans la liste Categories, sélectionnez StringHandling pour afficher les fonctions correspondantes dans la liste Functions. Dans cette liste, cliquez ensuite sur UPCASE.

    L'expression correspondante s'affiche alors dans la zone Expression.

  5. Editez l'expression afin qu'elle se présente comme suit : StringHandling.UPCASE(row3.word). Cette fonction met en majuscules les valeurs de la colonne word.

  6. Cliquez sur OK pour valider cette expression et fermer la vue.

  7. Cliquez sur OK pour valider la configuration de mapping et fermer le Mapper.

Écrire les résultats en sortie

  1. Double-cliquez sur le tMysqlOutput pour ouvrir sa vue Component.

  2. Dans le champ Host, saisissez l'adresse de la machine hébergeant la base de données à utiliser.

  3. Dans le champ Database, saisissez le nom de la base de données à utiliser. Dans ce scénario, la base de données se nomme Talend.

  4. Dans les champs User name et Password, saisissez les informations d'authentification à la base de données.

  5. Dans le champ Table name, saisissez le nom de la table dans laquelle écrire les données, par exemple, wordcount. Cette table doit déjà exister.

Exécuter le Job

Appuyez sur F6 pour exécuter le Job.

Vous pouvez voir les résultats dans la base de données MySQL.

Vous pouvez voir le code Map/Reduce généré par ce Job dans la vue Code de l'espace de modélisation graphique, comme par exemple le mapper construit par le tNormalize.