Executar trabalhos do Apache Sqoop no HDInsight com o Curl
Aprenda a usar o Curl para executar tarefas do Apache Sqoop em um cluster do Apache Hadoop no HDInsight. Este artigo demonstra como exportar dados do Armazenamento do Microsoft Azure e importá-los para um banco de dado do SQL Server usando o Curl. Este artigo é uma continuação do Usar o Apache Sqoop com o Hadoop no HDInsight.
Curl é usado para demonstrar como você pode interagir com o HDInsight usando solicitações HTTP brutas para executar, monitorar e recuperar os resultados de trabalhos do Sqoop. Isso funciona usando a API REST do WebHCat (anteriormente conhecido como Templeton) fornecida pelo seu cluster HDInsight.
Pré-requisitos
Conclusão de Configurar o ambiente de teste de Usar o Apache Sqoop com o Hadoop no HDInsight.
Um cliente para consultar o Banco de dados SQL do Azure. Considere usar o SQL Server Management Studio ou o Visual Studio Code.
Curl. Curl é uma ferramenta para transferir dados de ou um cluster HDInsight ou para ele.
jq. O utilitário jq é usado para processar os dados JSON retornados de solicitações REST.
Familiaridade com o Sqoop. Para obter mais informações, consulte Guia do usuário do Sqoop.
Enviar trabalhos do Apache Sqoop usando o cURL
Use o Curl para exportar dados usando os trabalhos do Apache Sqoop do Armazenamento do Microsoft Azure para o SQL Server.
Observação
Ao usar o Curl ou qualquer outra comunicação do REST com WebHCat, você deve autenticar as solicitações, fornecendo o nome de usuário e a senha para o administrador do cluster HDInsight. Você também deve usar o nome do cluster como parte do URI (Uniform Resource Identifier) usado para enviar as solicitações ao servidor.
Para os comandos nesta seção, substitua USERNAME
pelo usuário para autenticar o cluster e substitua PASSWORD
pela senha da conta de usuário. Substitua CLUSTERNAME
pelo nome do cluster.
A API REST é protegida por meio de autenticação básica. Você deve sempre fazer solicitações usando HTTPS (HTTP seguro) para ajudar a garantir que suas credenciais sejam enviadas com segurança para o servidor.
Para facilitar o uso, defina as variáveis abaixo. Este exemplo se baseia em um ambiente Windows, revise conforme necessário para seu ambiente.
set CLUSTERNAME= set USERNAME=admin set PASSWORD= set SQLDATABASESERVERNAME= set SQLDATABASENAME= set SQLPASSWORD= set SQLUSER=sqluser
De uma linha de comando, use o seguinte comando para verificar se você pode se conectar ao cluster HDInsight:
curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Você deve receber uma resposta com esta aparência:
{"status":"ok","version":"v1"}
Use o seguinte para enviar um trabalho do sqoop:
curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
Os parâmetros usados nesse comando são os seguintes:
-d – uma vez que
-G
não é usado; a solicitação padrão é o método POST.-d
especifica os valores de dados que são enviados com a solicitação.user.name - o usuário que está executando o comando.
command - o comando Sqoop a ser executado.
statusdir - o diretório no qual o status deste trabalho será gravado.
Esse comando retornará uma ID de trabalho que pode ser usada para verificar o status do trabalho.
{"id":"job_1415651640909_0026"}
Para verificar o status do trabalho, use o comando a seguir. Substitua
JOBID
pelo valor retornado na etapa anterior. Por exemplo, se o valor retornado era{"id":"job_1415651640909_0026"}
, entãoJOBID
seriajob_1415651640909_0026
. Revise o local dejq
conforme necessário.set JOBID=job_1415651640909_0026 curl -G -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | C:\HDI\jq-win64.exe .status.state
Se o trabalho foi concluído, o estado será SUCCEEDED.
Observação
Essa solicitação de Curl retorna um documento JSON (JavaScript Object Notation) com informações sobre o trabalho; jq é usado para recuperar o valor de estado.
Depois que o estado do trabalho for alterado para SUCCEEDED, você poderá recuperar os resultados do trabalho no Armazenamento de Blobs do Azure. O parâmetro
statusdir
transmitido com a consulta contém a localização do arquivo de saída; nesse caso,wasb:///example/data/sqoop/curl
. Esse endereço armazena a saída do trabalho no diretórioexample/data/sqoop/curl
do contêiner de armazenamento padrão usado pelo cluster HDInsight.É possível usar o Portal do Azure para acessar os blobs stderr e stdout.
Para verificar se os dados foram exportados, use as seguintes consultas do cliente SQL para exibir os dados exportados:
SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK); SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
Limitações
- Exportação em massa — com o HDInsight baseado em Linux, o conector Sqoop usado para exportar dados no Microsoft SQL Server ou no Banco de Dados SQL do Azure, atualmente, não permite inserções em massa.
- Envio em lote — com HDInsight baseado em Linux, ao usar o comutador
-batch
na execução de inserções, Sqoop executará várias inserções em vez de operações de inserção em lotes.
Resumo
Conforme demonstrado neste documento, você pode usar uma solicitação HTTP bruta para executar, monitorar e exibir os resultados de trabalhos do Sqoop no cluster HDInsight.
Para obter mais informações sobre a interface REST usada neste artigo, confira o Guia da API REST do Apache Sqoop.
Próximas etapas
Usar o Apache Sqoop com o Apache Hadoop no HDInsight
Para outros artigos do HDInsight que envolvem curl: