Exécuter des tâches Apache Sqoop dans HDInsight avec Curl

Apprenez à utiliser Curl pour exécuter des tâches Apache Sqoop sur un cluster Apache Hadoop dans HDInsight. Cet article montre comment exporter des données à partir du stockage Azure et les importer dans une base de données SQL Server à l’aide de Curl. Cet article est la suite de Utiliser Apache Sqoop avec Hadoop dans HDInsight.

Curl est utilisé pour illustrer comment interagir avec HDInsight en utilisant des demandes HTTP brutes pour exécuter, analyser et récupérer des travaux Sqoop. Cela fonctionne à l’aide de l’API REST WebHCat (anciennement Templeton) fournie par votre cluster HDInsight.

Prérequis

Envoyer les travaux Apache Sqoop avec Curl

Utilisez Curl pour exporter des données à l’aide d’Apache Sqoop à partir du stockage Azure pour SQL Server.

Notes

Lorsque vous utilisez Curl ou toute autre communication REST avec WebHCat, vous devez authentifier les demandes en fournissant le nom d'utilisateur et le mot de passe de l'administrateur du cluster HDInsight. Vous devez également utiliser le nom du cluster dans l’URI (Uniform Resource Identifier) utilisé pour envoyer les demandes au serveur.

Pour les commandes de cette section, remplacez USERNAME par l’utilisateur à authentifier sur le cluster et PASSWORD par le mot de passe du compte d’utilisateur. Remplacez CLUSTERNAME par le nom de votre cluster.

L’API REST est sécurisée à l’aide de l’ authentification de base. Vous devez toujours effectuer les demandes à l’aide du protocole Secure HTTP (HTTPS) pour aider à vous assurer que vos informations d’identification sont envoyées en toute sécurité sur le serveur.

  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 USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  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 %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Vous devez recevoir une réponse ayant l'aspect suivant :

    {"status":"ok","version":"v1"}
    
  3. Pour envoyer un travail Sqoop, utilisez la commande suivante :

    curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
    

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

    • -d : étant donné que -G n’est pas utilisé, la requête correspond par défaut à la méthode POST. -d spécifie les valeurs de données envoyées avec la demande.

      • user.name : l’utilisateur qui exécute la commande.

      • command : commande Sqoop à exécuter.

      • statusdir : le répertoire où seront enregistrés les statuts de cette tâche.

      Cette commande va retourner un ID de tâche qui peut être utilisé pour vérifier l’état de la tâche.

      {"id":"job_1415651640909_0026"}
      
  4. Pour vérifier le statut de la tâche, utilisez la commande suivante. Remplacez JOBID par la valeur renvoyée à l’étape précédente. Par exemple, si la valeur de retour était {"id":"job_1415651640909_0026"}, alors JOBID devrait être job_1415651640909_0026. Modifiez l’emplacement de jq en fonction de vos besoins.

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

    Si le travail est terminé, l’état est TERMINÉ.

    Notes

    Cette demande Curl retourne un document JSON (JavaScript Object Notation) avec des informations sur la tâche ; jq est utilisé pour récupérer uniquement la valeur de statut.

  5. Une fois que le statut de la tâche est passé à TERMINÉ, 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 notre cas wasb:///example/data/sqoop/curl. Cette adresse stocke la sortie de la tâche dans le répertoire example/data/sqoop/curl sur le conteneur de stockage par défaut utilisé par votre cluster HDInsight.

    Vous pouvez utiliser le portail Azure pour accéder aux objets BLOB stderr et stdout.

  6. Pour vérifier que les données ont été exportées, utilisez les requêtes suivantes à partir de votre client SQL pour voir les données exportées :

    SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK);
    SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
    

Limites

  • Exportation en bloc : Avec HDInsight sous Linux, le connecteur Sqoop utilisé pour exporter des données vers Microsoft SQL Server ou Azure SQL Database ne prend pas en charge les insertions en bloc.
  • Traitement par lots : avec HDInsight sous Linux, lorsque vous utilisez le commutateur -batch pour effectuer des insertions, Sqoop effectue plusieurs insertions plutôt qu’un traitement par lots des opérations d’insertion.

Résumé

Comme illustré dans ce document, vous pouvez utiliser une demande HTTP brute pour exécuter, surveiller et afficher les résultats des travaux Sqoop sur votre cluster HDInsight.

Pour plus d’informations sur l’interface REST utilisée dans cet article, consultez le Guide de l’API REST Apache Sqoop.

Étapes suivantes

Utiliser Apache Sqoop avec Apache Hadoop sur HDInsight

Pour d’autres articles HDInsight impliquant curl :