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

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

Pré-requisitos

Configurar

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

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Para facilitar o uso, defina variáveis. Substitua PASSWORD, MYSQLSERVERe MYDATABASE com os valores relevantes 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 Sqoop

Do Hive para o SQL.

  1. Para verificar se o Sqoop pode ver seu banco de dados, digite 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. Digite 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 Hive hivesampletable para a mobiledata tabela em seu 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 exibir 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 Sqoop

Do SQL para o armazenamento do Azure.

  1. Digite o comando abaixo em sua conexão SSH aberta para importar dados da mobiledata tabela em SQL para o wasbs:///tutorials/usesqoop/importeddata diretório no HDInsight. Os campos nos dados são separados por um caractere de tabulação e as linhas são terminadas 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, você também pode especificar uma tabela 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, digite o seguinte comando em 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. Ligar

      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 SQL não suporta inserções em massa.

  • Processamento em lote - Com o HDInsight baseado em Linux, ao usar o switch ao executar inserções, o -batch Sqoop faz várias inserções em vez de agrupar as operações de inserção.

Considerações importantes

  • O HDInsight e o SQL Server devem estar na mesma Rede Virtual do Azure.

    Para obter um exemplo, consulte Conectar o HDInsight ao documento de rede local.

    Para obter mais informações sobre como usar o HDInsight com uma Rede Virtual do Azure, consulte o documento Estender o HDInsight com a Rede Virtual do Azure. Para obter mais informações sobre a Rede Virtual do Azure, consulte o documento Visão geral da Rede Virtual.

  • O SQL Server deve ser configurado para permitir a autenticação SQL. Para obter mais informações, consulte o documento Choose an Authentication Mode .

  • Talvez seja necessário configurar o SQL Server para aceitar conexões remotas. Para obter mais informações, consulte o documento Como solucionar problemas de conexão com o mecanismo de banco de dados do SQL Server.

Próximos passos

Agora você aprendeu a usar o Sqoop. Para saber mais, veja: