Partage via


Exécuter des tâches MapReduce avec Apache Hadoop sur HDInsight avec REST

Découvrez comment utiliser l’API REST WebHCat Apache Hive pour exécuter des tâches MapReduce sur un cluster Apache Hadoop sur HDInsight. Curl est utilisé pour illustrer comment interagir avec HDInsight en utilisant des requêtes HTTP brutes pour exécuter des tâches MapReduce.

Notes

Si vous vous êtes déjà familiarisé avec l’utilisation de serveurs Hadoop sous Linux, mais que vous découvrez HDInsight, consultez le document Ce qu’il faut savoir sur Apache Hadoop dans HDInsight sous Linux.

Prérequis

Au choix :

  • Windows PowerShell ou,
  • Curl avec jq

Exécuter une tâche MapReduce

Notes

Lorsque vous utilisez Curl ou toute autre communication REST avec WebHCat, vous devez authentifier les requêtes en fournissant le nom d’utilisateur et le mot de passe d’administrateur de cluster HDInsight. Vous devez utiliser le nom du cluster dans l’URI utilisé pour envoyer les requêtes au serveur.

L’API REST est sécurisée à l’aide de l’ authentification d’accès de base. Vous devez toujours effectuer les requêtes à l’aide de HTTPS pour vous assurer que vos informations d’identification sont envoyées en toute sécurité sur le serveur.

Curl

  1. Pour faciliter l’utilisation, définissez les variables ci-dessous. Cet exemple est fondé sur un environnement Windows ; vous devez le modifier si nécessaire pour votre environnement.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. À partir d’une ligne de commande, exécutez la commande suivante pour vérifier que vous pouvez vous connecter à votre cluster HDInsight.

    curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Les paramètres utilisés dans cette commande sont les suivants :

    • -u : Indique le nom d’utilisateur et le mot de passe utilisés pour authentifier la demande
    • -G : Indique que cette opération est une requête GET

    Le début de l’URI, https://CLUSTERNAME.azurehdinsight.net/templeton/v1, est le même pour toutes les demandes.

    La réponse reçue est similaire au JSON suivant :

    {"version":"v1","status":"ok"}
    
  3. Pour soumettre une tâche MapReduce, utilisez la commande suivante. Modifiez le chemin d’accès à jq si nécessaire.

    curl -u admin:%PASSWORD% -d user.name=admin ^
    -d jar=/example/jars/hadoop-mapreduce-examples.jar ^
    -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^
    https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^
    C:\HDI\jq-win64.exe .id
    

    La fin de l’URI (/mapreduce/jar) indique à WebHCat que cette demande lance une tâche MapReduce à partir d’une classe dans un fichier jar. Les paramètres utilisés dans cette commande sont les suivants :

    • -d : -G n’est pas utilisé, la requête fait donc défaut à la méthode POST. -d spécifie les valeurs de données envoyées avec la demande.
      • user.name : Utilisateur qui exécute la commande
      • jar : L’emplacement du fichier jar contenant la classe à exécuter
      • class : La classe contenant la logique MapReduce
      • arg : Les arguments à transmettre à la tâche MapReduce. Dans le cas présent, le fichier texte d’entrée et le répertoire utilisés pour la sortie

    Cette commande doit retourner un ID de tâche qui peut être utilisé pour vérifier le statut de la tâche : job_1415651640909_0026.

  4. Pour vérifier le statut de la tâche, utilisez la commande suivante. Remplacez la valeur de JOBID par la valeur de réelle renvoyée à l’étape précédente. Revoyez l’emplacement des jq si nécessaire.

    set JOBID=job_1415651640909_0026
    
    curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^
    C:\HDI\jq-win64.exe .status.state
    

PowerShell

  1. Pour faciliter l’utilisation, définissez les variables ci-dessous. Remplacez CLUSTERNAME par le véritable nom de votre cluster. Exécutez la commande et saisissez le mot de passe de connexion du cluster lorsque vous y êtes invité.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Utilisez la commande suivante pour vérifier que vous pouvez vous connecter à votre cluster Azure HDInsight :

    $resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" `
        -Credential $creds `
        -UseBasicParsing
    $resp.Content
    

    La réponse reçue est similaire au JSON suivant :

    {"version":"v1","status":"ok"}
    
  3. Pour envoyer une tâche MapReduce, utilisez la commande suivante :

    $reqParams = @{}
    $reqParams."user.name" = "admin"
    $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar"
    $reqParams.class = "wordcount"
    $reqParams.arg = @()
    $reqParams.arg += "/example/data/gutenberg/davinci.txt"
    $reqparams.arg += "/example/data/output"
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    La fin de l’URI (/mapreduce/jar) indique à WebHCat que cette demande lance une tâche MapReduce à partir d’une classe dans un fichier jar. Les paramètres utilisés dans cette commande sont les suivants :

    • user.name : Utilisateur qui exécute la commande
    • jar : L’emplacement du fichier jar contenant la classe à exécuter
    • class : La classe contenant la logique MapReduce
    • arg : Les arguments à transmettre à la tâche MapReduce. Dans le cas présent, le fichier texte d’entrée et le répertoire utilisés pour la sortie

    Cette commande doit retourner un ID de tâche qui peut être utilisé pour vérifier le statut de la tâche : job_1415651640909_0026.

  4. Pour vérifier le statut de la tâche, utilisez la commande suivante :

    $reqParams=@{"user.name"="admin"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" `
       -Credential $creds `
       -Body $reqParams `
       -UseBasicParsing
    
    # ConvertFrom-JSON can't handle duplicate names with different case
    # So change one to prevent the error
    $fixDup=$resp.Content.Replace("jobID","job_ID")
    (ConvertFrom-Json $fixDup).status.state
    

Les deux méthodes

  1. Si la tâche est terminée, l’état est SUCCEEDED.

  2. Lorsque l’état de la tâche passe à SUCCEEDED, vous pouvez récupérer les résultats depuis le Stockage Blob Azure. Le paramètre statusdir transmis avec la requête contient l’emplacement du fichier de sortie. Dans cet exemple, l’emplacement est /example/curl. Cette adresse stocke le résultat de la tâche dans le stockage par défaut du cluster : /example/curl.

Vous pouvez répertorier et télécharger ces fichiers à l’aide de l' interface de ligne de commande Azure. Pour plus d’informations sur l’utilisation d’Azure CLI avec le stockage Blob Azure, consultez Démarrage rapide : Créer, télécharger et lister des objets blob avec Azure CLI.

Étapes suivantes

Pour plus d’informations sur d’autres méthodes de travail avec Hadoop sur HDInsight :

Pour plus d’informations sur l’interface REST utilisée dans cet article, consultez la Référence WebHCat.