Partager via


Exécuter des programmes MapReduce personnalisés

Les systèmes de données volumineux basés sur Apache Hadoop tels que HDInsight permettent de traiter des données à l’aide d’un large éventail d’outils et de technologies. Le tableau suivant décrit les principaux avantages et les considérations de chacun de ces mécanismes.

Mécanisme de requête Avantages Considérations
Apache Hive avec HiveQL
  • Une excellente solution pour le traitement par lots et l’analyse de grandes quantités de données immuables, pour le résumé des données et pour l’interrogation à la demande. Il utilise une syntaxe de type SQL classique.
  • Il peut être utilisé pour générer des tables de données persistantes qui peuvent être facilement partitionnées et indexées.
  • Différentes tables et vues externes peuvent être créées sur les mêmes données.
  • Il prend en charge une implémentation d’entrepôt de données simple qui fournit des fonctionnalités considérables de montée en charge et de tolérance de panne pour le traitement et le stockage des données.
  • Il requiert que les données sources possèdent au moins une structure identifiable.
  • Il n’est pas approprié pour les requêtes en temps réel et les mises à jour au niveau des lignes. Il est idéal pour les traitements par lots sur des jeux de données volumineux.
  • Il est possible qu’il ne puisse pas effectuer certains types de tâches de traitement complexes.
Apache Pig avec Pig Latin
  • Une excellente solution pour la manipulation de données sous forme de jeux, la fusion et le filtrage de jeux de données, l’application de fonctions à des enregistrements ou des groupes d’enregistrements, et la restructuration de données par définition de colonnes, regroupement de valeurs ou conversion de colonnes en lignes.
  • Il peut utiliser une approche basée sur les flux de travail comme séquence d’opérations sur les données.
  • Pig Latin peut sembler moins familier et plus difficile à utiliser que HiveQL pour les utilisateurs de SQL.
  • La sortie par défaut est généralement un fichier texte et peut donc être plus difficile à utiliser avec des outils de visualisation comme Excel. En général, vous placez une table Hive sur la sortie.
MapReduce personnalisé
  • Fournit un contrôle total sur le mappage, et réduit le nombre de phases ainsi que le temps d’exécution.
  • Les requêtes peuvent être optimisées de manière à atteindre les performances maximales du cluster, ou pour réduire au minimum la charge sur les serveurs et le réseau.
  • Les composants peuvent être écrits dans divers langages courants.
  • Cela est plus difficile à utiliser que Pig ou Hive, car vous devez créer vos propres composants map et reduce.
  • Les processus qui nécessitent de joindre des jeux de données sont plus difficiles à implémenter.
  • Bien que des infrastructures de test soient disponibles, le débogage du code est plus complexe que pour une application normale, car le code s’exécute comme un traitement par lots sous le contrôle du planificateur de travaux Hadoop.
Apache HCatalog
  • Il abstrait les informations de chemin d’accès du stockage, ce qui simplifie l’administration et n’oblige pas les utilisateurs à savoir où sont stockées les données.
  • Il fournit la notification d’événements tels que la disponibilité des données, ce qui permet à d’autres outils comme Oozie de détecter l’heure d’exécution des opérations.
  • Il présente une vue relationnelle des données, notamment le partitionnement par clé, et facilite l’accès aux données.
  • Il prend en charge les formats de fichier RCFile, texte CSV, texte JSON, SequenceFile et ORC par défaut, mais vous devrez probablement écrire une méthode SerDe personnalisée pour les autres formats.
  • HCatalog n’est pas thread-safe.
  • Il existe des restrictions sur les types de données des colonnes quand vous utilisez le chargeur HCatalog dans des scripts Pig. Pour plus d’informations, consultez Types de données HCatLoader dans la documentation HCatalog Apache.

En général, vous utilisez l’approche la plus simple permettant de fournir les résultats recherchés. Par exemple, vous pouvez obtenir ces résultats en utilisant simplement Hive, mais pour les scénarios plus complexes, vous devrez peut-être utiliser Pig, ou encore écrire vos propres composants map et reduce. Vous pouvez également décider, après avoir essayé Hive ou Pig, que des composants map et reduce personnalisés pourraient offrir de meilleures performances en vous permettant d’affiner et d’optimiser le traitement.

Composants MapReduce personnalisés

Le code MapReduce est composé de deux fonctions distinctes implémentées sous la forme des composants map et reduce. Le composant map est exécuté en parallèle sur plusieurs nœuds de cluster, chacun appliquant le mappage à son propre sous-ensemble de données. Le composant reduce rassemble et réduit la forme finale des résultats en un seul résultat de toutes les fonctions de mappage. Pour plus d’informations sur ces deux composants, consultez Utilisation de MapReduce dans Hadoop sur HDInsight.

Dans la plupart des scénarios de traitement HDInsight, il est plus simple et plus efficace d’utiliser un niveau supérieur d’abstraction tel que Pig ou Hive. Vous pouvez également créer des composants map et reduce personnalisés à utiliser dans des scripts Hive pour un traitement plus sophistiqué.

Les composants MapReduce personnalisés sont généralement écrits en Java. Hadoop fournit une interface de streaming qui permet également d’utiliser des composants développés dans d’autres langages tels que C#, F#, Visual Basic, Python et JavaScript.

Vous devez envisager de créer vos propres composants map et reduce dans les conditions suivantes :

  • Vous devez traiter des données totalement non structurées à l’aide d’une analyse et d’une logique personnalisée pour en tirer des informations structurées.
  • Vous souhaitez effectuer des tâches complexes difficiles (voire impossibles) à exprimer en Pig ou Hive sans avoir recours à la création d’une fonction définie par l’utilisateur. Par exemple, vous devrez peut-être utiliser un service de géocodage externe pour convertir des coordonnées de latitude et de longitude ou des adresses IP dans les données sources en noms d’emplacements géographiques.
  • Vous souhaitez réutiliser votre code .NET, Python ou JavaScript existant dans les composants MapReduce en utilisant l’interface de streaming Hadoop.

Charger et exécuter votre programme MapReduce personnalisé

Les programmes MapReduce les plus courants sont écrits en Java et compilés dans un fichier jar.

  1. Une fois que vous avez développé, compilé et testé votre programme MapReduce, utilisez la commande scp pour charger votre fichier jar dans le nœud principal.

    scp mycustomprogram.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    

    Remplacez CLUSTERNAME par le nom du cluster. Si vous avez utilisé un mot de passe pour sécuriser le compte SSH, vous êtes invité à entrer ce mot de passe. Si vous avez utilisé un certificat, vous devrez peut-être utiliser le paramètre -i pour spécifier le fichier de clé privée.

  2. Utilisez la commande ssh pour vous connecter à votre cluster. Modifiez la commande ci-dessous en remplaçant CLUSTERNAME par le nom de votre cluster, puis entrez la commande :

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. À partir de la session SSH, exécutez votre programme MapReduce via YARN.

    yarn jar mycustomprogram.jar mynamespace.myclass /example/data/sample.log /example/data/logoutput
    

    Cette commande envoie la tâche MapReduce à YARN. Le fichier d’entrée est /example/data/sample.log, et le répertoire de sortie est /example/data/logoutput. Le fichier d’entrée et tous les fichiers de sortie sont stockés dans le stockage par défaut du cluster.

Étapes suivantes