Usar o Apache Sqoop para importar e exportar dados entre o Apache Hadoop no HDInsight e o Banco de Dados SQL do Azure

Aprenda a usar o Apache Sqoop para importar e exportar entre um cluster do Apache Hadoop no HDInsight do Azure e no banco de dados SQL do Azure ou do Microsoft SQL Server. As etapas deste documentam usam o comando sqoop diretamente do nó principal do cluster Hadoop. Use o SSH para se conectar ao nó principal e executar os comandos neste documento. Este artigo é uma continuação do Usar o Apache Sqoop com o Hadoop no HDInsight.

Pré-requisitos

Configuração

  1. Use o comando ssh para se conectar ao cluster. Edite o comando abaixo substituindo CLUSTERNAME pelo nome do cluster e, em seguida, insira o comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Para facilitar o uso, defina as variáveis. Substitua PASSWORD, MYSQLSERVER e MYDATABASE pelos respectivos valores e; em seguida, insira os comandos abaixo:

    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"
    

Exportação do Sqoop

Do Hive para o SQL.

  1. Para verificar se o Sqoop pode ver seu banco de dados, insira o comando abaixo em sua conexão SSH aberta. Este comando retorna uma lista de bancos de dados.

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. Insira o seguinte comando para ver uma lista de tabelas para o banco de dados especificado:

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Para exportar dados da tabela hivesampletable do Hive para a tabela mobiledata no banco de dados, digite o comando abaixo em sua conexão SSH aberta:

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. Para verificar se os dados foram exportados, use as seguintes consultas da sua conexão SSH para visualizar os dados 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)"
    

Importação do Sqoop

Do SQL Server para o armazenamento do Azure.

  1. Insira o comando abaixo em sua conexão SSH aberta para importar dados da tabela mobiledata no SQL, para o diretório wasbs:///tutorials/usesqoop/importeddata no HDInsight. Os campos nos dados que são separados por um caractere de tabulação, e as linhas serão encerradas por um caractere de nova linha.

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' -m 1
    
  2. Como alternativa, também é possível especificar uma tabela do 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
    
  3. Quando a importação for concluída, insira o seguinte comando na sua conexão SSH aberta para listar os dados no novo diretório:

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. Use beeline para verificar se a tabela foi criada no Hive.

    1. Conectar

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. Execute cada consulta abaixo uma de cada vez e revise a saída:

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. Saia do beeline com !exit.

Limitações

  • Exportação em massa — com o HDInsight baseado em Linux, o conector Sqoop usado para exportar dados para o SQL do Azure, não permite inserções em massa.

  • Envio em lote — Com HDInsight baseado em Linux, ao usar o comutador -batch ao executar inserções, o Sqoop executará várias inserções em vez de operações de inserção em lotes.

Considerações importantes

Próximas etapas

Você aprendeu como usar o Sqoop. Para obter mais informações, consulte: