Use Apache Sqoop para importar y exportar datos entre Apache Hadoop en HDInsight y Azure SQL Database.
Aprenda a usar Apache Sqoop para realizar importaciones y exportaciones entre un clúster de Apache Hadoop en Azure HDInsight y Azure SQL Database o Microsoft SQL Server. En los pasos descritos en este documento se usa el comando sqoop
directamente desde el nodo principal del clúster de Hadoop. Usaremos SSH para conectarnos al nodo principal y ejecutar los comandos de este documento. Este artículo es una continuación de Uso de Apache Sqoop con Hadoop en 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 SSH. Para más información, consulte Conexión a través de SSH con HDInsight (Apache Hadoop).
Familiaridad con Sqoop. Para más información, consulte la guía de usuario de Sqoop.
Configurar
Use el comando SSH para conectarse al clúster. Modifique el comando siguiente: reemplace CLUSTERNAME por el nombre del clúster y, luego, escriba el comando:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Para facilitar su uso, establezca variables. Reemplace
PASSWORD
,MYSQLSERVER
yMYDATABASE
por los valores pertinentes y, luego, escriba los siguientes comandos:export PASSWORD='PASSWORD' export SQL_SERVER="MYSQLSERVER" export DATABASE="MYDATABASE" export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD" export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
Exportación de Sqoop
De Hive a SQL.
Para comprobar que Sqoop puede ver la base de datos, escriba el comando siguiente en la conexión SSH abierta. Este comando devuelve una lista de las bases de datos.
sqoop list-databases --connect $SERVER_CONNECT
Escriba el siguiente comando para ver una lista de tablas de la base de datos especificada:
sqoop list-tables --connect $SERVER_DB_CONNECT
Para exportar datos de la tabla
hivesampletable
de Hive a la tablamobiledata
en la base de datos, escriba el comando siguiente en la conexión SSH abierta:sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
Para comprobar que los datos se han exportado, use las siguientes consultas desde la conexión SSH para ver los datos exportados:
sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)" sqoop eval --connect $SERVER_DB_CONNECT \ --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
Importación de Sqoop
De SQL a Azure Storage.
Escriba el comando siguiente en la conexión SSH abierta para importar datos desde la tabla
mobiledata
en SQL al directoriowasbs:///tutorials/usesqoop/importeddata
en HDInsight. Los campos de los datos se separan mediante un carácter de tabulación y las líneas terminan con un carácter de nueva línea.sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' -m 1
Como alternativa, también puede especificar una tabla de Hive:
sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --create-hive-table \ --hive-table mobiledata_imported2 \ --hive-import -m 1
Una vez que se complete la importación, escriba el comando siguiente en la conexión SSH abierta para mostrar los datos del directorio nuevo:
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
Use beeline para comprobar que la tabla se ha creado en Hive.
Conectar
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Ejecute cada una de las siguientes consultas una en una y revise la salida:
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
Salga de beeline con
!exit
.
Limitaciones
Exportación masiva: con HDInsight basado en Linux, el conector Sqoop que se usa para exportar datos a SQL no admite inserciones masivas.
Procesamiento por lotes: con HDInsight basado en Linux, cuando se usa
-batch
al realizar inserciones, Sqoop realiza varias inserciones en lugar de procesar por lotes las operaciones de inserción.
Consideraciones importantes
Tanto HDInsight como SQL Server deben estar en la misma red Azure Virtual Network.
Para obtener un ejemplo, consulte el documento Conexión de HDInsight a la red local.
Para más información sobre el uso de HDInsight con una instancia de Azure Virtual Network, consulte el documento Cómo ampliar HDInsight con Azure Virtual Network. Para más información sobre Azure Virtual Network, vea el documento Información general sobre Virtual Network.
SQL Server estar configurado para permitir la autenticación SQL. Para más información, vea el documento Choose an Authentication Mode (Elegir un modo de autenticación).
Es posible que tenga que configurar SQL Server para aceptar conexiones remotas.
Pasos siguientes
Ahora ya ha aprendido a usar Sqoop. Para obtener más información, consulte:
- Uso de Apache Oozie con HDInsight: use la acción Sqoop en un flujo de trabajo de Oozie.
- Análisis de la información de retraso de vuelos con HDInsight: use Interactive Query para analizar los datos de retraso de vuelos y luego use Sqoop para exportar los datos a una base de datos en Azure.
- Carga de datos en HDInsight: busque otros métodos para cargar datos en HDInsight o Azure Blob Storage.