Share via


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

Meer informatie over het gebruik van de WebHCat REST API voor het uitvoeren van Apache Hive-query's 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, waar CLUSTERNAME is de naam van uw cluster. 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 andere REST-communicatie met WebHCat gebruikt, moet u de aanvragen verifiëren door de gebruikersnaam en het wachtwoord op te geven voor de HDInsight-clusterbeheerder. 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 Secure HTTP (HTTPS).

Instellen (referenties behouden)

Bewaar 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 uw werkelijke wachtwoord te PASSWORD vervangen. 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"

Correct opgemaakte clusternaam identificeren

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

Bewerk de onderstaande scripts om deze te vervangen door CLUSTERNAME de clusternaam. 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/v1is hetzelfde voor alle aanvragen. Het pad geeft /statusaan dat de aanvraag een status van WebHCat (ook wel Templeton genoemd) voor de server retourneert. 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, die gegevens verzendt als onderdeel van de aanvraag naar de REST API. De volgende gegevenswaarden worden verzonden met de aanvraag:

    • user.name - De gebruiker die de opdracht uitvoert.
    • execute - De HiveQL-instructies die moeten worden uitgevoerd.
    • statusdir - De map waarnaar de status van deze taak is 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. Externe tabellen slaan alleen de tabeldefinitie op in Hive. De gegevens blijven op de oorspronkelijke locatie achter.

      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 - De indeling van de gegevens. De velden in elk logboek worden gescheiden door een spatie.

    • STORED AS TEXTFILE LOCATION - Waar de gegevens worden opgeslagen (de voorbeeldmap/gegevensmap) en die als tekst worden opgeslagen.

    • SELECT - Selecteert een telling van alle rijen waarin kolom t4 de waarde [FOUT] 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 wanneer ze worden gebruikt 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 SUCCEEDED, kunt u de resultaten van de taak ophalen uit Azure Blob Storage. De statusdir parameter die met de query is doorgegeven, bevat de locatie van het uitvoerbestand; in dit geval /example/rest. Met dit adres wordt de uitvoer opgeslagen in de example/curl map in de standaardopslagclusters.

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

Volgende stappen

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

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