MapReduce-feladatok futtatása AZ Apache Hadooptal HDInsighton REST használatával

Megtudhatja, hogyan futtathat MapReduce-feladatokat az Apache Hive WebHCat REST API használatával egy Apache Hadoop on HDInsight-fürtön. A Curl bemutatja, hogyan használhatja a HDInsightot nyers HTTP-kérések használatával a MapReduce-feladatok futtatásához.

Megjegyzés

Ha már ismeri a Linux-alapú Hadoop-kiszolgálók használatát, de még nem ismeri a HDInsightot, olvassa el a Mit kell tudni a HdInsighton futó Linux-alapú Apache Hadoopról ? című dokumentumot.

Előfeltételek

Vagy:

  • Windows PowerShell vagy
  • Curl a jq

MapReduce-feladat futtatása

Megjegyzés

Ha Curl- vagy egyéb REST-kommunikációt használ a WebHCat szolgáltatással, hitelesítenie kell a kéréseket a HDInsight-fürt rendszergazdai felhasználónevének és jelszavának megadásával. A fürt nevét kell használnia annak az URI-nak a részeként, amellyel a kéréseket elküldheti a kiszolgálónak.

A REST API-t alapszintű hozzáférési hitelesítés védi. Mindig https használatával kell kéréseket küldenie, hogy a hitelesítő adatok biztonságosan el legyenek küldve a kiszolgálóra.

Curl

  1. A könnyű használat érdekében állítsa be az alábbi változókat. Ez a példa egy Windows-környezeten alapul, és szükség szerint felülvizsgálja a környezetet.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. Egy parancssorból a következő paranccsal ellenőrizze, hogy tud-e kapcsolódni a HDInsight-fürthöz:

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

    Ezen parancs paraméterei a következők:

    • -u: A kérelem hitelesítéséhez használt felhasználónevet és jelszót jelzi
    • -G: Azt jelzi, hogy ez a művelet EGY GET kérés

    Az URI kezdete minden https://CLUSTERNAME.azurehdinsight.net/templeton/v1kérésnél megegyezik.

    A következő JSON-hoz hasonló választ kap:

    {"version":"v1","status":"ok"}
    
  3. MapReduce-feladat elküldéséhez használja az alábbi parancsot. Szükség szerint módosítsa a jq elérési útját.

    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
    

    Az URI vége (/mapreduce/jar) azt jelzi a WebHCatnek, hogy ez a kérés egy MapReduce-feladatot indít el egy jar-fájl egyik osztályából. Ezen parancs paraméterei a következők:

    • -d: -G nincs használatban, ezért a kérés alapértelmezés szerint a POST metódusra érvényes. -d a kéréssel küldött adatértékeket adja meg.
      • user.name: A parancsot futtató felhasználó
      • jar: A futtatandó osztályt tartalmazó jar-fájl helye
      • class: A MapReduce logikát tartalmazó osztály
      • arg: A MapReduce feladatnak átadni kívánt argumentumok. Ebben az esetben a bemeneti szövegfájl és a kimenethez használt könyvtár

    Ennek a parancsnak egy feladatazonosítót kell visszaadnia, amely a feladat állapotának ellenőrzésére használható: job_1415651640909_0026.

  4. A feladat állapotának ellenőrzéséhez használja az alábbi parancsot. Cserélje le az értéket JOBID az előző lépésben visszaadott tényleges értékre. Szükség szerint módosítsa a jq helyét.

    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. A könnyű használat érdekében állítsa be az alábbi változókat. Cserélje le CLUSTERNAME a elemet a tényleges fürtnévre. Futtassa a parancsot, és amikor a rendszer kéri, adja meg a fürt bejelentkezési jelszavát.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. Az alábbi paranccsal ellenőrizze, hogy tud-e csatlakozni a HDInsight-fürthöz:

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

    A következő JSON-hoz hasonló választ kap:

    {"version":"v1","status":"ok"}
    
  3. MapReduce-feladat elküldéséhez használja a következő parancsot:

    $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
    

    Az URI vége (/mapreduce/jar) azt jelzi a WebHCatnek, hogy ez a kérés egy MapReduce-feladatot indít el egy jar-fájl egyik osztályából. Ezen parancs paraméterei a következők:

    • user.name: A parancsot futtató felhasználó
    • jar: A futtatandó osztályt tartalmazó jar-fájl helye
    • class: A MapReduce logikát tartalmazó osztály
    • arg: A MapReduce feladatnak átadni kívánt argumentumok. Ebben az esetben a bemeneti szövegfájl és a kimenethez használt könyvtár

    Ennek a parancsnak egy feladatazonosítót kell visszaadnia, amely a feladat állapotának ellenőrzésére használható: job_1415651640909_0026.

  4. A feladat állapotának ellenőrzéséhez használja a következő parancsot:

    $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
    

Mindkét módszer

  1. Ha a feladat befejeződött, a visszaadott állapot a következő: SUCCEEDED.

  2. Amikor a feladat állapota a következőre SUCCEEDEDváltozott: , a feladat eredményeit lekérheti az Azure Blob Storage-ból. A statusdir lekérdezéssel átadott paraméter tartalmazza a kimeneti fájl helyét. Ebben a példában a hely a következő /example/curl: . Ez a cím a feladat kimenetét a fürtök alapértelmezett tárolójában tárolja a következő helyen: /example/curl.

Ezeket a fájlokat az Azure CLI használatával listázhatja és letöltheti. Az Azure CLI-vel az Azure Blob Storage használatával kapcsolatos további információkért lásd : Gyorsútmutató: Blobok létrehozása, letöltése és listázása az Azure CLI-vel.

Következő lépések

További információk a Hadoop hdInsighton való használatával kapcsolatos egyéb módokról:

A cikkben használt REST felülettel kapcsolatos további információkért lásd a WebHCat-referenciát.