Ejecución de trabajos de Apache Sqoop en HDInsight con Curl

En este documento aprenderá a utilizar Curl para ejecutar trabajos de Apache Sqoop en un clúster de Apache Hadoop en HDInsight. En este artículo se muestra cómo exportar datos desde Azure Storage y cómo importarlos en una base de datos de SQL Server mediante Curl. Este artículo es una continuación de Uso de Apache Sqoop con Hadoop en HDInsight.

Curl sirve para demostrar cómo se puede interactuar con HDInsight usando solicitudes HTTP sin procesar para ejecutar, supervisar y recuperar los resultados de los trabajos de Sqoop. Esto funciona mediante la API de REST de WebHCat (conocida anteriormente como Templeton) proporcionada por el clúster de HDInsight.

Requisitos previos

Envío de trabajos de Apache Sqoop mediante Curl

Use Curl para exportar datos mediante trabajos de Apache Sqoop desde Azure Storage a SQL Server.

Nota

Al usar Curl o cualquier otra comunicación REST con WebHCat, debe proporcionar el nombre de usuario y la contraseña del administrador del clúster de HDInsight para autenticar las solicitudes. También debe usar el nombre del clúster como parte del identificador uniforme de recursos (URI) que se usa para enviar las solicitudes al servidor.

Cuando se usen los comandos de esta sección, reemplace USERNAME por el usuario para autenticación en el clúster y PASSWORD por la contraseña de la cuenta de usuario. Reemplace CLUSTERNAME por el nombre del clúster.

La API de REST se protege con la autenticación básica. Siempre debe crear solicitudes usando HTTP segura (HTTPS) para así garantizar que las credenciales se envían de manera segura al servidor.

  1. Para facilitar su uso, establezca las variables siguientes. Este ejemplo se basa en un entorno de Windows, revise según sea necesario para su entorno.

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. Desde una línea de comandos, utilice el siguiente comando para comprobar que puede conectarse al clúster de HDInsight.

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

    Debería recibir una respuesta similar a la siguiente:

    {"status":"ok","version":"v1"}
    
  3. Para enviar el trabajo de sqoop, use lo siguiente:

    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
    

    Los parámetros que se utilizan en este comando son los siguientes:

    • -d: como -G no se usa, la solicitud establece como valor predeterminado el método POST. -d especifica los valores de datos que se envían con la solicitud.

      • user.name : el usuario que ejecuta el comando.

      • command : el comando de Sqoop para ejecutar.

      • statusdir : el directorio donde se escribirá el estado de este trabajo.

      Este comando devolverá un identificador de trabajo que se pueda usar para comprobar el estado del trabajo.

      {"id":"job_1415651640909_0026"}
      
  4. Para revisar el estado del trabajo, use el siguiente comando. Reemplace JOBID por el valor devuelto en el paso anterior. Por ejemplo, si el valor devuelto fue {"id":"job_1415651640909_0026"}, entonces JOBID debería ser job_1415651640909_0026. Revise la ubicación de jq según sea necesario.

    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 se completó el trabajo, el estado será SUCCEEDED.

    Nota

    Esta solicitud de Curl devuelve un documento de notación de objetos JavaScript (JSON) con información acerca del trabajo; jq se usa para recuperar solo el valor de estado.

  5. Una vez que el estado del trabajo cambió a SUCCEEDED, puede recuperar los resultados del trabajo desde Azure Blob Storage. El parámetro statusdir pasado con la consulta contiene la ubicación del archivo de salida; en este caso, wasb:///example/data/sqoop/curl. Esta dirección almacena la salida del trabajo en el directorio example/data/sqoop/curl en el contenedor de almacenamiento predeterminado que su clúster de HDInsight usa.

    Puede usar Azure Portal para tener acceso a los blobs "stderr" y "stdout".

  6. Para comprobar que los datos se han exportado, use las siguientes consultas en el cliente SQL para ver los datos exportados:

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

Limitaciones

  • Exportación masiva: con HDInsight basado en Linux, el conector Sqoop que se utiliza para exportar datos a Microsoft SQL Server o Azure SQL Database no es compatible actualmente con las inserciones masivas.
  • Procesamiento por lotes: con HDInsight basado en Linux, cuando se usa -batch al realizar inserciones, Sqoop realizará varias inserciones en lugar de procesar por lotes las operaciones de inserción.

Resumen

Tal como se ha mostrado en este documento, puede usar una solicitud HTTP sin procesar para ejecutar, supervisar y ver los resultados de los trabajos de Sqoop en su clúster de HDInsight.

Para más información sobre la interfaz REST utilizada en este artículo, consulte la guía de Apache Sqoop REST API.

Pasos siguientes

Uso de Apache Sqoop con Apache Hadoop en HDInsight

Si quiere leer más artículos de HDInsight en los que se incluya Curl, consulte: