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

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.

  1. 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
    
  2. 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"}
    
  3. 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"}
      
  4. 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 seria job_1415651640909_0026. Reveja 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 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.

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

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