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:

Criar tabelas de exemplo no banco de dados

  1. 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
    
  2. 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.

  1. 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.

  2. 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

  1. Navegue até o diretório onde os pacotes do Sqoop estão disponíveis. Normalmente, esse local é /usr/hdp/<version>/sqoop/bin.

  2. 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
    
  3. 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

  1. 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 ","
    
  2. 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.

Próximas etapas