Partilhar via


Executar trabalhos do Apache Sqoop no HDInsight com o Curl

Saiba como usar o Curl para executar trabalhos do Apache Sqoop em um cluster Apache Hadoop no HDInsight. Este artigo demonstra como exportar dados do Armazenamento do Azure e importá-los para um banco de dados do SQL Server usando Curl. Este artigo é uma continuação de Usar o Apache Sqoop com Hadoop no HDInsight.

O 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 conhecida como Templeton) fornecida pelo cluster HDInsight.

Pré-requisitos

Enviar trabalhos do Apache Sqoop usando Curl

Use o Curl para exportar dados com os trabalhos do Apache Sqoop a partir do armazenamento do Azure para o SQL Server.

Observação

Ao usar o Curl ou qualquer outra comunicação REST com o 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 no cluster e substitua PASSWORD pela senha da conta de usuário. Substitua CLUSTERNAME pelo nome do cluster.

A API de REST está protegida por autenticação básica. Você sempre deve fazer solicitações usando HTTP seguro (HTTPS) 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 é baseado 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. Em 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
    

    Deverá receber uma resposta semelhante à seguinte:

    {"status":"ok","version":"v1"}
    
  3. Use o seguinte para submeter 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 utilizados neste comando são os seguintes:

    • -d - Como -G não é usado, o padrão da solicitaçã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 do Sqoop a ser executado.

      • statusdir - O diretório no qual o status deste trabalho será gravado.

      Este comando retornará um ID de trabalho que pode ser usado para verificar o status do trabalho.

      {"id":"job_1415651640909_0026"}
      
  4. Para verificar o status do trabalho, use o seguinte comando. Substitua JOBID pelo valor retornado na etapa anterior. Por exemplo, se o valor de retorno fosse {"id":"job_1415651640909_0026"}, então JOBID seria job_1415651640909_0026. Revise a localização 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 tiver terminado, o estado será CONCLUÍDO COM SUCESSO.

    Observação

    Essa solicitação Curl retorna um documento JSON (JavaScript Object Notation) com informações sobre o trabalho; jq é usado para recuperar apenas o valor do estado.

  5. Depois que o estado do trabalho for alterado para SUCCEEDED, você poderá recuperar os resultados do trabalho do armazenamento de Blob do Azure. O statusdir parâmetro passado com a consulta contém o local do arquivo de saída, neste caso, wasb:///example/data/sqoop/curl. Este endereço armazena a saída do trabalho no diretório example/data/sqoop/curl no contêiner de armazenamento padrão usado pelo cluster HDInsight.

    Você pode usar o portal do Azure para acessar 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 para o Microsoft SQL Server ou o Banco de Dados SQL do Azure atualmente não oferece suporte a inserções em massa.
  • Processamento em lote - Com o HDInsight baseado em Linux, ao usar o -batch switch ao executar inserções, o Sqoop realizará várias inserções em vez de agrupar as operações de inserção.

Resumo

Conforme demonstrado neste documento, você pode usar uma solicitação HTTP bruta para executar, monitorar e exibir os resultados de trabalhos Sqoop em seu cluster HDInsight.

Para obter mais informações sobre a interface REST usada neste artigo, consulte o guia da API REST do Apache Sqoop.

Próximos passos

Usar o Apache Sqoop com o Apache Hadoop no HDInsight

Para outros artigos do HDInsight que envolvam ondulação: