Apache Hive-query's uitvoeren met Apache Hadoop in HDInsight met behulp van REST

Meer informatie over het gebruik van de WebHCat REST API om Apache Hive-query's uit te voeren met Apache Hadoop in een Azure HDInsight-cluster.

Vereisten

Basis-URI voor REST API

De basis-URI (Uniform Resource Identifier) voor de REST API in HDInsight is https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, waarbij CLUSTERNAME de naam van uw cluster is. Clusternamen in URI's zijn hoofdlettergevoelig. Hoewel de clusternaam in het FQDN-gedeelte (Fully Qualified Domain Name) van de URI (CLUSTERNAME.azurehdinsight.net) niet hoofdlettergevoelig is, zijn andere exemplaren in de URI hoofdlettergevoelig.

Verificatie

Wanneer u cURL of een andere REST-communicatie met WebHCat gebruikt, moet u de aanvragen verifiëren door de gebruikersnaam en het wachtwoord op te geven voor de beheerder van het HDInsight-cluster. De REST API is beveiligd via basisverificatie. Om ervoor te zorgen dat uw referenties veilig naar de server worden verzonden, moet u altijd aanvragen indienen met behulp van BEVEILIGDE HTTP (HTTPS).

Installatie (referenties behouden)

Behoud uw referenties om te voorkomen dat ze voor elk voorbeeld opnieuw worden gebruikt. De clusternaam blijft behouden in een afzonderlijke stap.

A. Bash
Bewerk het onderstaande script door te PASSWORD vervangen door uw werkelijke wachtwoord. Voer vervolgens de opdracht in.

export PASSWORD='PASSWORD'

B. PowerShell Voer de onderstaande code uit en voer uw referenties in het pop-upvenster in:

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"

De juiste clusternaam identificeren

De daadwerkelijke lettergrootte van de clusternaam kan anders zijn dan verwacht, afhankelijk van hoe het cluster is gemaakt. In de stappen hier wordt de werkelijke behuizing weergegeven en vervolgens opgeslagen in een variabele voor alle latere voorbeelden.

Bewerk de onderstaande scripts om te vervangen door CLUSTERNAME de naam van uw cluster. Voer vervolgens de opdracht in. (De clusternaam voor de FQDN is niet hoofdlettergevoelig.)

export CLUSTER_NAME=$(curl -u admin:$PASSWORD -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $CLUSTER_NAME
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
    -Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;

# Show cluster name
$clusterName

Een Hive-query uitvoeren

  1. Gebruik een van de volgende opdrachten om te controleren of u verbinding kunt maken met uw HDInsight-cluster:

    curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/status
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/status" `
       -Credential $creds `
       -UseBasicParsing
    $resp.Content
    

    U ontvangt een antwoord dat lijkt op de volgende tekst:

    {"status":"ok","version":"v1"}
    

    In deze opdracht worden de volgende parameters gebruikt:

    • -u - De gebruikersnaam en het wachtwoord die worden gebruikt om de aanvraag te verifiëren.
    • -G - Geeft aan dat deze aanvraag een GET-bewerking is.
  2. Het begin van de URL, https://$CLUSTERNAME.azurehdinsight.net/templeton/v1, is hetzelfde voor alle aanvragen. Het pad, /status, geeft aan dat de aanvraag is om de status WebHCat (ook bekend als Templeton) voor de server te retourneren. U kunt ook de versie van Hive aanvragen met behulp van de volgende opdracht:

    curl -u admin:$PASSWORD -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/version/hive
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/version/hive" `
       -Credential $creds `
       -UseBasicParsing
    $resp.Content
    

    Deze aanvraag retourneert een antwoord dat lijkt op de volgende tekst:

    {"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
    
  3. Gebruik het volgende om een tabel met de naam log4jLogs te maken:

    JOB_ID=$(curl -s -u admin:$PASSWORD -d user.name=admin -d execute="DROP+TABLE+log4jLogs;CREATE+EXTERNAL+TABLE+log4jLogs(t1+string,t2+string,t3+string,t4+string,t5+string,t6+string,t7+string)+ROW+FORMAT+DELIMITED+FIELDS+TERMINATED+BY+' '+STORED+AS+TEXTFILE+LOCATION+'/example/data/';SELECT+t4+AS+sev,COUNT(*)+AS+count+FROM+log4jLogs+WHERE+t4+=+'[ERROR]'+AND+INPUT__FILE__NAME+LIKE+'%25.log'+GROUP+BY+t4;" -d statusdir="/example/rest" https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/hive | jq -r .id)
    echo $JOB_ID
    
    $reqParams = @{"user.name"="admin";"execute"="DROP TABLE log4jLogs;CREATE EXTERNAL TABLE log4jLogs(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED BY ' ' STORED AS TEXTFILE LOCATION '/example/data/;SELECT t4 AS sev,COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' GROUP BY t4;";"statusdir"="/example/rest"}
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/templeton/v1/hive" `
       -Credential $creds `
       -Body $reqParams `
       -Method POST `
       -UseBasicParsing
    $jobID = (ConvertFrom-Json $resp.Content).id
    $jobID
    

    Deze aanvraag maakt gebruik van de POST-methode, waarmee gegevens als onderdeel van de aanvraag naar de REST API worden verzonden. De volgende gegevenswaarden worden met de aanvraag verzonden:

    • user.name - De gebruiker die de opdracht uitvoert.
    • execute - De HiveQL-instructies die moeten worden uitgevoerd.
    • statusdir - De map waarnaar de status voor deze taak wordt geschreven.

    Met deze instructies worden de volgende acties uitgevoerd:

    • DROP TABLE - Als de tabel al bestaat, wordt deze verwijderd.

    • CREATE EXTERNAL TABLE - Hiermee maakt u een nieuwe 'externe' tabel in Hive. Bij externe tabellen wordt alleen de tabeldefinitie opgeslagen in Hive. De gegevens worden op de oorspronkelijke locatie achtergelaten.

      Notitie

      Externe tabellen moeten worden gebruikt wanneer u verwacht dat de onderliggende gegevens worden bijgewerkt door een externe bron. Bijvoorbeeld een geautomatiseerd proces voor het uploaden van gegevens of een andere MapReduce-bewerking.

      Als u een externe tabel verwijdert, worden de gegevens niet verwijderd, alleen de tabeldefinitie.

    • ROW FORMAT - Hoe de gegevens worden opgemaakt. De velden in elk logboek worden gescheiden door een spatie.

    • STORED AS TEXTFILE LOCATION - Waar de gegevens worden opgeslagen (de map voorbeeld/gegevens) en dat deze worden opgeslagen als tekst.

    • SELECT - Selecteert een telling van alle rijen waarin kolom t4 de waarde [ERROR] bevat. Deze instructie retourneert een waarde van 3 , omdat er drie rijen zijn die deze waarde bevatten.

      Notitie

      U ziet dat de spaties tussen HiveQL-instructies worden vervangen door het + teken bij gebruik met Curl. Waarden tussen aanhalingstekens die een spatie bevatten, zoals het scheidingsteken, mogen niet worden vervangen door +.

      Met deze opdracht wordt een taak-id geretourneerd die kan worden gebruikt om de status van de taak te controleren.

  4. Gebruik de volgende opdracht om de status van de taak te controleren:

    curl -u admin:$PASSWORD -d user.name=admin -G https://$CLUSTER_NAME.azurehdinsight.net/templeton/v1/jobs/$jobid | jq .status.state
    
    $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
    

    Als de taak is voltooid, is de status GESLAAGD.

  5. Zodra de status van de taak is gewijzigd in GESLAAGD, kunt u de resultaten van de taak ophalen uit Azure Blob Storage. De statusdir parameter die met de query wordt doorgegeven, bevat de locatie van het uitvoerbestand, /example/restin dit geval . Met dit adres wordt de uitvoer opgeslagen in de example/curl map in de standaardopslag van clusters.

    U kunt deze bestanden weergeven en downloaden met behulp van de Azure CLI. Zie het document Azure CLI gebruiken met Azure Storage voor meer informatie over het gebruik van de Azure CLI met Azure Storage .

Volgende stappen

Voor informatie over andere manieren waarop u met Hadoop in HDInsight kunt werken:

Zie het WebHCat-referentiedocument voor meer informatie over de REST API die in dit document wordt gebruikt.