Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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
Finalización de la configuración de un entorno de prueba de Uso de Apache Sqoop con Hadoop en HDInsight.
Un cliente para consultar Azure SQL Database. Considere el uso de SQL Server Management Studio o Visual Studio Code.
Curl. Curl es una herramienta que se usa para transferir datos desde o hacia un clúster de HDInsight.
jq. La utilidad jq se usa para procesar los datos JSON que devuelven las solicitudes de REST.
Familiaridad con Sqoop. Para más información, consulte la guía de usuario de Sqoop.
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.
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=sqluserDesde 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/statusDebería recibir una respuesta similar a la siguiente:
{"status":"ok","version":"v1"}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/sqoopLos parámetros que se utilizan en este comando son los siguientes:
-d: como
-Gno se usa, la solicitud establece como valor predeterminado el método POST.-despecifica 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"}
Para revisar el estado del trabajo, use el siguiente comando. Reemplace
JOBIDpor el valor devuelto en el paso anterior. Por ejemplo, si el valor devuelto fue{"id":"job_1415651640909_0026"}, entoncesJOBIDdebería serjob_1415651640909_0026. Revise la ubicación dejqsegú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.stateSi 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.
Una vez que el estado del trabajo cambió a SUCCEEDED, puede recuperar los resultados del trabajo desde Azure Blob Storage. El parámetro
statusdirpasado 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 directorioexample/data/sqoop/curlen 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".
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
-batchal 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: