Executar tarefas do Apache Sqoop no HDInsight com Curl
Saiba como utilizar o Curl para executar tarefas do Apache Sqoop num cluster do Apache Hadoop no HDInsight. Este artigo demonstra como exportar dados do Armazenamento do Azure e importá-los para uma base de dados SQL Server com o Curl. Este artigo é uma continuação de Utilizar o Apache Sqoop com o Hadoop no HDInsight.
O Curl é utilizado para demonstrar como pode interagir com o HDInsight através de pedidos HTTP não processados para executar, monitorizar e obter os resultados das tarefas do Sqoop. Isto funciona com a API REST WebHCat (anteriormente conhecida como Templeton) fornecida pelo cluster do HDInsight.
Pré-requisitos
Conclusão de Configurar o ambiente de teste a partir de Utilizar o Apache Sqoop com o Hadoop no HDInsight.
Um cliente para consultar a Base de Dados do SQL do Azure. Considere utilizar o SQL Server Management Studio ou o Visual Studio Code.
Caracol. O Curl é uma ferramenta para transferir dados de ou para um cluster do HDInsight.
jq. O utilitário jq é utilizado para processar os dados JSON devolvidos a partir de pedidos REST.
Estar familiarizado com o Sqoop. Para obter mais informações, veja Guia do Utilizador do Sqoop.
Submeter tarefas do Apache Sqoop com o Curl
Utilize o Curl para exportar dados com tarefas do Apache Sqoop do Armazenamento do Azure para SQL Server.
Nota
Quando utilizar Curl ou quaisquer outras comunicações REST com WebHCat, tem de autenticar os pedidos, indicando o nome de utilizador e palavra-passe para o administrador de cluster do HDInsight. Também tem de utilizar o nome do cluster como parte do identificador URI (Uniform Resource Identifier) utilizado para enviar os pedidos para o servidor.
Para os comandos nesta secção, substitua USERNAME
pelo utilizador para autenticar no cluster e substitua PASSWORD
pela palavra-passe da conta de utilizador. Substitua CLUSTERNAME
pelo nome do cluster.
A API de REST está protegida por autenticação básica. Deve sempre efetuar pedidos utilizando HTTP Secure (HTTPS) para ajudar a garantir que as credenciais são enviadas de forma segura para o servidor.
Para facilitar a utilização, defina as variáveis abaixo. Este exemplo baseia-se num ambiente do Windows, reveja conforme necessário para o seu ambiente.
set CLUSTERNAME= set USERNAME=admin set PASSWORD= set SQLDATABASESERVERNAME= set SQLDATABASENAME= set SQLPASSWORD= set SQLUSER=sqluser
Numa linha de comandos, utilize o seguinte comando para verificar que se consegue ligar ao cluster do HDInsight:
curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
Deverá receber uma resposta semelhante ao seguinte:
{"status":"ok","version":"v1"}
Utilize o seguinte para submeter uma tarefa 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 utilizados neste comando são os seguintes:
-d - Uma
-G
vez que não é utilizado, o pedido é predefinido para o método POST.-d
especifica os valores de dados que são enviados com o pedido.user.name - O utilizador que está a executar o comando.
comando – o comando sqoop a executar.
statusdir – o diretório no qual o estado desta tarefa será escrito.
Este comando irá devolver um ID de tarefa que pode ser utilizado para verificar o estado da tarefa.
{"id":"job_1415651640909_0026"}
Para verificar o estado da tarefa, utilize o seguinte comando. Substitua
JOBID
pelo valor devolvido no passo anterior. Por exemplo, se o valor devolvido fosse{"id":"job_1415651640909_0026"}
,JOBID
seriajob_1415651640909_0026
. Reveja a localização 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 a tarefa tiver sido concluída, o estado será COM ÊXITO.
Nota
Este pedido Curl devolve um documento JavaScript Object Notation (JSON) com informações sobre a tarefa; o jq é utilizado para obter apenas o valor de estado.
Depois de o estado da tarefa ter sido alterado para SUCCEEDED, pode obter os resultados da tarefa a partir do armazenamento de Blobs do Azure. O
statusdir
parâmetro transmitido com a consulta contém a localização do ficheiro de saída; neste caso,wasb:///example/data/sqoop/curl
. Este endereço armazena a saída da tarefa noexample/data/sqoop/curl
diretório no contentor de armazenamento predefinido utilizado pelo cluster do HDInsight.Pode utilizar o portal do Azure para aceder a blobs stderr e stdout.
Para verificar se os dados foram exportados, utilize as seguintes consultas do cliente SQL para ver 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 do Sqoop utilizado para exportar dados para o Microsoft SQL Server ou SQL do Azure Database não suporta atualmente inserções em massa.
- Criação de batches – com o HDInsight baseado em Linux, ao utilizar o
-batch
comutador ao efetuar inserções, o Sqoop executará várias inserções em vez de criar em lotes as operações de inserção.
Resumo
Conforme demonstrado neste documento, pode utilizar um pedido HTTP não processado para executar, monitorizar e ver os resultados das tarefas do Sqoop no cluster do HDInsight.
Para obter mais informações sobre a interface REST utilizada neste artigo, veja o Guia da API REST do Apache Sqoop.
Passos seguintes
Utilizar o Apache Sqoop com o Apache Hadoop no HDInsight
Para outros artigos do HDInsight que envolvem curl: