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

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.

  1. 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
    
  2. 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"}
    
  3. 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"}
      
  4. 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ão JOBID seria job_1415651640909_0026. Revise o local de jq 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.

  5. 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ório example/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.

  6. 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: