Aracılığıyla paylaş


REST kullanarak HDInsight üzerinde Apache Hadoop ile MapReduce işlerini çalıştırma

HDInsight kümesindeki bir Apache Hadoop üzerinde MapReduce işlerini çalıştırmak için Apache Hive WebHCat REST API'sini kullanmayı öğrenin. Curl, MapReduce işlerini çalıştırmak için ham HTTP isteklerini kullanarak HDInsight ile nasıl etkileşim kurabileceğinizi göstermek için kullanılır.

Not

Linux tabanlı Hadoop sunucularını kullanmayı zaten biliyorsanız ancak HDInsight'ta yeniyseniz HDInsight üzerinde Linux tabanlı Apache Hadoop hakkında bilmeniz gerekenler belgesine bakın.

Önkoşullar

Şunlardan biri:

  • Windows PowerShell veya
  • jq ile curl

MapReduce işi çalıştırma

Not

Curl veya WebHCat ile başka bir REST iletişimi kullandığınızda, HDInsight kümesi yönetici kullanıcı adını ve parolasını sağlayarak isteklerin kimliğini doğrulamanız gerekir. Küme adını, istekleri sunucuya göndermek için kullanılan URI'nin bir parçası olarak kullanmanız gerekir.

REST API'nin güvenliği temel erişim kimlik doğrulaması kullanılarak sağlanır. Kimlik bilgilerinizin sunucuya güvenli bir şekilde gönderilmesini sağlamak için her zaman HTTPS kullanarak istekte bulunmanız gerekir.

Curl

  1. Kullanım kolaylığı için aşağıdaki değişkenleri ayarlayın. Bu örnek bir Windows ortamını temel alır, ortamınız için gerektiği gibi düzeltin.

    set CLUSTERNAME=
    set PASSWORD=
    
  2. HDInsight kümenize bağlanabildiğinizi doğrulamak için bir komut satırında aşağıdaki komutu kullanın:

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

    Bu komutta kullanılan parametreler aşağıdaki gibidir:

    • -u: İsteğin kimliğini doğrulamak için kullanılan kullanıcı adını ve parolayı gösterir
    • -G: Bu işlemin bir GET isteği olduğunu gösterir

    URI'nin başlangıcı, https://CLUSTERNAME.azurehdinsight.net/templeton/v1tüm istekler için aynıdır.

    Aşağıdaki JSON'a benzer bir yanıt alırsınız:

    {"version":"v1","status":"ok"}
    
  3. MapReduce işi göndermek için aşağıdaki komutu kullanın. Jq yolunu gerektiği gibi değiştirin.

    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
    

    URI'nin (/mapreduce/jar) sonu WebHCat'e bu isteğin jar dosyasındaki bir sınıftan MapReduce işi başlattığını söyler. Bu komutta kullanılan parametreler aşağıdaki gibidir:

    • -d: -G kullanılmaz, bu nedenle istek varsayılan olarak POST yöntemini kullanır. -d , istekle birlikte gönderilen veri değerlerini belirtir.
      • user.name: Komutu çalıştıran kullanıcı
      • jar: Çalıştırılacak sınıfı içeren jar dosyasının konumu
      • class: MapReduce mantığını içeren sınıf
      • arg: MapReduce işine geçirilecek bağımsız değişkenler. Bu durumda, giriş metin dosyası ve çıkış için kullanılan dizin

    Bu komut, işin durumunu denetlemek için kullanılabilecek bir iş kimliği döndürmelidir: job_1415651640909_0026.

  4. İşin durumunu denetlemek için aşağıdaki komutu kullanın. değerini JOBID önceki adımda döndürülen gerçek değerle değiştirin. Jq konumunu gerektiği gibi düzeltin.

    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. Kullanım kolaylığı için aşağıdaki değişkenleri ayarlayın. değerini gerçek küme adınızla değiştirin CLUSTERNAME . komutunu yürüterek sorulduğunda küme oturum açma parolasını girin.

    $clusterName="CLUSTERNAME"
    $creds = Get-Credential -UserName admin -Message "Enter the cluster login password"
    
  2. HDInsight kümenize bağlanabildiğinizi doğrulamak için aşağıdaki komutu kullanın:

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

    Aşağıdaki JSON'a benzer bir yanıt alırsınız:

    {"version":"v1","status":"ok"}
    
  3. MapReduce işi göndermek için aşağıdaki komutu kullanın:

    $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
    

    URI'nin (/mapreduce/jar) sonu WebHCat'e bu isteğin jar dosyasındaki bir sınıftan MapReduce işi başlattığını söyler. Bu komutta kullanılan parametreler aşağıdaki gibidir:

    • user.name: Komutu çalıştıran kullanıcı
    • jar: Çalıştırılacak sınıfı içeren jar dosyasının konumu
    • class: MapReduce mantığını içeren sınıf
    • arg: MapReduce işine geçirilecek bağımsız değişkenler. Bu durumda, giriş metin dosyası ve çıkış için kullanılan dizin

    Bu komut, işin durumunu denetlemek için kullanılabilecek bir iş kimliği döndürmelidir: job_1415651640909_0026.

  4. İşin durumunu denetlemek için aşağıdaki komutu kullanın:

    $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
    

Her iki yöntem

  1. İş tamamlandıysa döndürülen durum olur SUCCEEDED.

  2. İşin durumu olarak değiştirildiğinde SUCCEEDED, işin sonuçlarını Azure Blob depolamadan alabilirsiniz. statusdir Sorgu ile geçirilen parametre, çıkış dosyasının konumunu içerir. Bu örnekte konumu şeklindedir /example/curl. Bu adres, işin çıkışını konumundaki /example/curlkümeler varsayılan depolama alanında depolar.

Azure CLI'yi kullanarak bu dosyaları listeleyebilir ve indirebilirsiniz. Azure Blob depolama ile çalışmak için Azure CLI kullanma hakkında daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI ile blob oluşturma, indirme ve listeleme.

Sonraki adımlar

HDInsight üzerinde Hadoop ile çalışmanın diğer yolları hakkında bilgi için:

Bu makalede kullanılan REST arabirimi hakkında daha fazla bilgi için bkz. WebHCat Başvurusu.