Copiar dados entre o Data Lake Storage Gen1 e o Banco de Dados SQL do Azure usando o Sqoop
Saiba como usar o Apache Sqoop para importar e exportar dados entre o Banco de Dados SQL do Azure e o Azure Data Lake Storage Gen1.
O que é o Sqoop?
Os aplicativos de big data são uma opção natural para o processamento de dados semi-estruturados e não estruturados, como logs e arquivos. No entanto, também pode ser necessário processar dados estruturados armazenados em bancos de dados relacionais.
O Apache Sqoop é uma ferramenta desenvolvida para transferir dados entre bancos de dados relacionais e um repositório de Big Data, como o Azure Data Lake Storage Gen1. Você pode usá-lo para importar dados de um RDBMS (sistema de gerenciamento de banco de dados relacionais), como o Banco de Dados SQL do Azure no Azure Data Lake Storage Gen1. Depois, transformar e analisar os dados usando cargas de trabalho de big data e exportar os dados de volta para um RDBMS. Neste artigo, é usado um Banco de Dados SQL do Azure como o banco de dados relacional para importação/exportação.
Pré-requisitos
Antes de começar, você deverá ter o seguinte:
- Uma assinatura do Azure. Consulte Obter a avaliação gratuita do Azure.
- Uma conta do Azure Data Lake Storage Gen1. Para obter instruções sobre como criar uma conta, confira Introdução ao Azure Data Lake Storage Gen1
- Cluster Azure HDInsight com acesso a uma conta do Azure Data Lake Storage Gen1. Veja Criar um cluster HDInsight com Data Lake Storage Gen1. Este artigo pressupõe que você tenha um cluster HDInsight Linux com acesso ao Azure Data Lake Storage Gen1.
- Banco de dados SQL do Azure. Para obter instruções sobre como criar um banco de dados no Banco de Dados SQL do Azure, confira Criar um banco de dados no Banco de Dados SQL do Azure
Criar tabelas de exemplo no banco de dados
Para começar, crie duas tabelas de exemplo no banco de dados. Use o SQL Server Management Studio ou o Visual Studio para se conectar ao banco de dados e execute as consultas a seguir.
Criar Tabela1
CREATE TABLE [dbo].[Table1]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GO
Criar Tabela2
CREATE TABLE [dbo].[Table2]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GO
Execute o comando a seguir para adicionar alguns dados de exemplo à Tabela1. Deixe a Tabela2 vazia. Posteriormente importaremos dados da Tabela1 para o Data Lake Storage Gen1. Depois, exportaremos dados do Data Lake Storage Gen1 para a Tabela2.
INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
Usar o Sqoop de um cluster HDInsight com acesso ao Data Lake Storage Gen1
Um cluster HDInsight já tem os pacotes Sqoop disponíveis. Se você configurou o cluster HDInsight para usar o Data Lake Storage Gen1 como armazenamento adicional, use o Sqoop (sem alterações de configuração) para importar/exportar dados entre o banco de dados relacional (como por exemplo, o Banco de Dados SQL do Azure) e a conta do Data Lake Storage Gen1.
Para este artigo, vamos assumir que você criou um cluster Linux para usar o SSH para se conectar ao cluster. Confira Conectar-se a um cluster HDInsight baseado em Linux.
Verifique se você pode acessar a conta de do Data Lake Storage Gen1 no cluster. Execute o comando a seguir do prompt do SSH:
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
Esse comando fornece uma lista de arquivos/pastas na conta do Data Lake Storage Gen1.
Importar dados do Banco de Dados SQL do Azure para o Data Lake Storage Gen1
Navegue até o diretório onde os pacotes do Sqoop estão disponíveis. Normalmente, esse local é
/usr/hdp/<version>/sqoop/bin
.Importe os dados da Tabela1 para a conta do Data Lake Storage Gen1. Use a seguinte sintaxe:
sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table1 --target-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1
O espaço reservado sql-database-server-name representa o nome do servidor em que o banco de dados está em execução. sql-database-name representa o nome do banco de dados real.
Por exemplo,
sqoop-import --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table1 --target-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1
Verifique se os dados foram transferidos para a conta do Data Lake Storage Gen1. Execute o comando a seguir:
hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
A saída a seguir será exibida.
-rwxrwxrwx 0 sshuser hdfs 0 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/_SUCCESS -rwxrwxrwx 0 sshuser hdfs 12 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00000 -rwxrwxrwx 0 sshuser hdfs 14 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00001 -rwxrwxrwx 0 sshuser hdfs 13 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00002 -rwxrwxrwx 0 sshuser hdfs 18 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00003
Cada arquivo part-m- corresponde a uma linha na tabela de origem, Table1. Você pode exibir o conteúdo dos arquivos part-m-* para verificação.
Exportar dados do Data Lake Storage Gen1 para o Banco de Dados SQL do Azure
Exporte os dados da conta do Data Lake Storage Gen1 para a tabela vazia, a Tabela2, no Banco de Dados SQL do Azure. Use a sintaxe a seguir.
sqoop-export --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table2 --export-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
Por exemplo,
sqoop-export --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table2 --export-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
Verifique se os dados foram carregados na tabela do Banco de Dados SQL. Use o SQL Server Management Studio ou o Visual Studio para se conectar ao Banco de Dados SQL do Azure e então execute a consulta a seguir.
SELECT * FROM TABLE2
Esse comando deve ter a seguinte saída.
ID FName LName ------------------- 1 Neal Kell 2 Lila Fulton 3 Erna Myers 4 Annette Simpson
Considerações de desempenho ao usar o Sqoop
Para saber mais sobre ajuste de desempenho do trabalho do Sqoop na cópia de dados para o Data Lake Storage Gen1, confira Postagem no blog sobre desempenho do Sqoop.