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
Conclusão de Configurar o ambiente de teste de Usar o Apache Sqoop com o Hadoop no HDInsight.
Um cliente SSH. Para saber mais, confira Conectar-se ao HDInsight (Apache Hadoop) usando SSH.
Familiaridade com o Sqoop. Para obter mais informações, consulte Guia do usuário do Sqoop.
Configuração
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
Para facilitar o uso, defina as variáveis. Substitua
PASSWORD
,MYSQLSERVER
eMYDATABASE
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=$DATABASE"
Exportação do Sqoop
Do Hive para o SQL.
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
Insira o seguinte comando para ver uma lista de tabelas para o banco de dados especificado:
sqoop list-tables --connect $SERVER_DB_CONNECT
Para exportar dados da tabela
hivesampletable
do Hive para a tabelamobiledata
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
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.
Insira o comando abaixo em sua conexão SSH aberta para importar dados da tabela
mobiledata
no SQL, para o diretóriowasbs:///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
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
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
Use beeline para verificar se a tabela foi criada no Hive.
Conectar
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
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;
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
O HDInsight e o SQL Server devem estar na mesma Rede Virtual do Azure.
Por exemplo, veja o documento Como conectar o HDInsight à sua rede local.
Para obter mais informações sobre a utilização do HDInsight com uma Rede Virtual do Azure, veja o documento como estender o HDInsight com a Rede Virtual do Azure. Para saber mais sobre Rede Virtual do Azure, veja o documento Visão Geral da Rede Virtual.
O SQL Server também deve ser configurado para permitir autenticação do SQL. Para obter mais informações, consulte o documento Escolher um modo de autenticação.
Você precisará configurar o SQL Server para aceitar conexões remotas.
Próximas etapas
Você aprendeu como usar o Sqoop. Para obter mais informações, consulte:
- Usar o Apache Oozie com o HDInsight: Use a ação Sqoop em um fluxo de trabalho do Oozie.
- Analisar dados de atraso de voos usando o HDInsight: use o Interactive Query para analisar dados de atraso de voos e o Sqoop para exportar os dados para um banco de dados no Azure.
- Carregar dados no HDInsight: localize outros métodos de carregamento de dados no HDInsight/Armazenamento de Blob do Azure.