Share via


Executar tarefas do MapReduce com o Apache Hadoop no HDInsight usando o REST

Aprenda a usar a API REST WebHCat do Apache Hive para executar tarefas MapReduce em um Apache Hadoop no cluster HDInsight. O Curl é usado para demonstrar como você pode interagir com o HDInsight usando solicitações HTTP brutas para executar trabalhos MapReduce.

Observação

Se você já estiver familiarizado com o uso de servidores Hadoop baseados em Linux, mas não com o HDInsight, consulte o documento O que você precisa saber sobre o Apache Hadoop baseado em Linux no HDInsight.

Pré-requisitos

Ou:

  • Windows PowerShell ou,
  • Curl com jq

Executar um trabalho MapReduce

Observação

Ao usar o Curl ou quaisquer outras comunicações do REST com WebHCat, deve autenticar as solicitações fornecendo o nome de usuário de administrador de cluster HDInsight e a senha. Você também deve usar o nome do cluster como parte do URI usado para enviar as solicitações para o servidor.

A API REST é protegida usando autenticação básica de acesso. Você deve sempre fazer solicitações usando HTTPS para garantir que suas credenciais sejam enviadas com segurança para o servidor.

cURL

  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 PASSWORD=
    
  2. De uma linha de comando, use o seguinte comando para verificar se você pode se conectar ao cluster HDInsight:

    curl -u admin:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    Os parâmetros usados nesse comando são os seguintes:

    • -u: o nome de usuário e a senha usada para autenticar a solicitação
    • -G: indica que essa operação é uma solicitação GET

    O início do URI, https://CLUSTERNAME.azurehdinsight.net/templeton/v1, é o mesmo para todas as solicitações.

    Você deve receber uma resposta semelhante ao JSON a seguir:

    {"version":"v1","status":"ok"}
    
  3. Para enviar um trabalho MapReduce, use o comando a seguir. Modifique o caminho para JQ conforme necessário.

    curl -u admin:%PASSWORD% -d user.name=admin ^
    -d jar=/example/jars/hadoop-mapreduce-examples.jar ^
    -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output ^
    https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/mapreduce/jar | ^
    C:\HDI\jq-win64.exe .id
    

    O final do URI (/mapreduce/jar) informa ao WebHCat que essa solicitação inicia um trabalho MapReduce de uma classe em um arquivo jar. Os parâmetros usados nesse comando são os seguintes:

    • -d: -G não é usado, portanto, a solicitação padrão será 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
      • jar: o local do arquivo jar que contém a classe para ser executada
      • class: a classe que contém a lógica do MapReduce
      • arg: os argumentos a serem passados para o trabalho MapReduce. Nesse caso, o arquivo de texto de entrada e o diretório usados para a saída

    Este comando deve retornar uma ID de trabalho que pode ser usada para verificar o status do trabalho: job_1415651640909_0026.

  4. Para verificar o status do trabalho, use o comando a seguir. Substitua o valor para JOBID pelo valor real retornado na etapa anterior. Revise o local de jq conforme necessário.

    set JOBID=job_1415651640909_0026
    
    curl -G -u admin:%PASSWORD% -d user.name=admin https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | ^
    C:\HDI\jq-win64.exe .status.state
    

PowerShell

  1. Para facilitar o uso, defina as variáveis abaixo. Substitua CLUSTERNAME pelo nome do cluster real. Execute o comando e insira a senha de logon do cluster quando solicitado.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Use o comando a seguir para verificar se é possível se conectar ao cluster HDInsight:

    $resp = Invoke-WebRequest -Uri "https://$clustername.azurehdinsight.net/templeton/v1/status" `
        -Credential $creds `
        -UseBasicParsing
    $resp.Content
    

    Você deve receber uma resposta semelhante ao JSON a seguir:

    {"version":"v1","status":"ok"}
    
  3. Para enviar um trabalho MapReduce, use o seguinte comando:

    $reqParams = @{}
    $reqParams."user.name" = "admin"
    $reqParams.jar = "/example/jars/hadoop-mapreduce-examples.jar"
    $reqParams.class = "wordcount"
    $reqParams.arg = @()
    $reqParams.arg += "/example/data/gutenberg/davinci.txt"
    $reqparams.arg += "/example/data/output"
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/mapreduce/jar" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    O final do URI (/mapreduce/jar) informa ao WebHCat que essa solicitação inicia um trabalho MapReduce de uma classe em um arquivo jar. Os parâmetros usados nesse comando são os seguintes:

    • user.name: o usuário que está executando o comando
    • jar: o local do arquivo jar que contém a classe para ser executada
    • class: a classe que contém a lógica do MapReduce
    • arg: os argumentos a serem passados para o trabalho MapReduce. Nesse caso, o arquivo de texto de entrada e o diretório usados para a saída

    Este comando deve retornar uma ID de trabalho que pode ser usada para verificar o status do trabalho: job_1415651640909_0026.

  4. Para verificar o status do trabalho, use o comando a seguir:

    $reqParams=@{"user.name"="admin"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/jobs/$jobID" `
       -Credential $creds `
       -Body $reqParams `
       -UseBasicParsing
    
    # ConvertFrom-JSON can't handle duplicate names with different case
    # So change one to prevent the error
    $fixDup=$resp.Content.Replace("jobID","job_ID")
    (ConvertFrom-Json $fixDup).status.state
    

Ambos os métodos

  1. Se o trabalho for concluído, o estado retornado será SUCCEEDED.

  2. Depois que o estado do trabalho for alterado para SUCCEEDED, você poderá recuperar os resultados do trabalho do Armazenamento de Blobs do Azure. O parâmetro statusdir transmitido com a consulta contém o local do arquivo de saída. Neste exemplo, o local é /example/curl. Esse endereço armazena a saída do trabalho no armazenamento padrão de clusters em /example/curl.

Você pode listar e baixar esses arquivos usando a CLI do Azure. Para obter mais informações sobre como usar o CLI do Azure para trabalhar com o Armazenamento de Blobs do Azure, consulte Início Rápido: criar, baixar e listar blobs com a CLI do Azure.

Próximas etapas

Para obter informações sobre outros modos possíveis de trabalhar com Hadoop no HDInsight:

Para obter mais informações sobre a interface REST usada nesse artigo, consulte a Referência de WebHCat.