Aracılığıyla paylaş


REST kullanarak HDInsight'ta Apache Hadoop ile Apache Hive sorguları çalıştırma

Azure HDInsight kümesinde Apache Hadoop ile Apache Hive sorguları çalıştırmak için WebHCat REST API'sini kullanmayı öğrenin.

Önkoşullar

REST API için temel URI

HDInsight https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAMECLUSTERNAME üzerinde REST API için temel Tekdüzen Kaynak Tanımlayıcısı (URI), burada kümenizin adıdır. URI'lerdeki küme adları büyük/küçük harfe duyarlıdır. URI'ninCLUSTERNAME.azurehdinsight.net () tam etki alanı adı (FQDN) bölümündeki küme adı büyük/küçük harfe duyarlı olmasa da, URI'deki diğer oluşumlar büyük/küçük harfe duyarlıdır.

Kimlik Doğrulaması

cURL veya WebHCat ile başka bir REST iletişimi kullanırken, HDInsight küme yöneticisi için kullanıcı adını ve parolayı sağlayarak isteklerin kimliğini doğrulamanız gerekir. REST API’sinin güvenliği temel kimlik doğrulaması ile sağlanır. Kimlik bilgilerinizin sunucuya güvenli bir şekilde gönderilmesine yardımcı olmak için her zaman Güvenli HTTP (HTTPS) kullanarak istekte bulunabilirsiniz.

Kurulum (Kimlik bilgilerini koru)

Her örnekte yeniden girmemek için kimlik bilgilerinizi koruyun. Küme adı ayrı bir adımda korunur.

A. Bash
öğesini gerçek parolanızla değiştirerek PASSWORD aşağıdaki betiği düzenleyin. Ardından komutunu girin.

export PASSWORD='PASSWORD'

B. PowerShell Aşağıdaki kodu yürüterek açılır pencereye kimlik bilgilerinizi girin:

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

Doğru büyük/küçük harfe ayrılmış küme adını belirleme

Küme adının gerçek büyük/küçük harf sayısı, kümenin nasıl oluşturulduğuna bağlı olarak beklediğinizden farklı olabilir. Buradaki adımlarda gerçek büyük/küçük harf gösterilir ve sonraki tüm örnekler için bir değişkende depolanır.

Aşağıdaki betikleri kümenizin adıyla değiştirmek CLUSTERNAME için düzenleyin. Ardından komutunu girin. (FQDN için küme adı büyük/küçük harfe duyarlı değildir.)

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

Hive sorgusu çalıştırma

  1. HDInsight kümenize bağlanabildiğinizi doğrulamak için aşağıdaki komutlardan birini kullanın:

    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
    

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

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

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

    • -u - İsteğin kimliğini doğrulamak için kullanılan kullanıcı adı ve parola.
    • -G - Bu isteğin bir GET işlemi olduğunu gösterir.
  2. URL'nin başlangıcı, https://$CLUSTERNAME.azurehdinsight.net/templeton/v1tüm istekler için aynıdır. yolu, /statusisteğin sunucu için WebHCat (Templeton olarak da bilinir) durumunu döndürmek olduğunu gösterir. Aşağıdaki komutu kullanarak Hive sürümünü de isteyebilirsiniz:

    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
    

    Bu istek aşağıdaki metne benzer bir yanıt döndürür:

    {"module":"hive","version":"1.2.1000.2.6.5.3008-11"}
    
  3. log4jLogs adlı bir tablo oluşturmak için aşağıdakileri kullanın:

    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
    

    Bu istek, REST API'ye isteğin bir parçası olarak veri gönderen POST yöntemini kullanır. aşağıdaki veri değerleri istekle birlikte gönderilir:

    • user.name - Komutu çalıştıran kullanıcı.
    • execute - Yürütülecek HiveQL deyimleri.
    • statusdir - Bu işin durumunun yazıldığını dizin.

    Bu deyimler aşağıdaki eylemleri gerçekleştirir:

    • DROP TABLE - Tablo zaten varsa silinir.

    • CREATE EXTERNAL TABLE - Hive'da yeni bir 'dış' tablo oluşturur. Dış tablolar yalnızca Hive'da tablo tanımını depolar. Veriler özgün konumda bırakılır.

      Not

      Temel alınan verilerin bir dış kaynak tarafından güncelleştirilmesini beklerken dış tablolar kullanılmalıdır. Örneğin, otomatik veri yükleme işlemi veya başka bir MapReduce işlemi.

      Dış tablo bırakılıyorsa veriler silinmez , yalnızca tablo tanımı silinir.

    • ROW FORMAT - Verilerin nasıl biçimlendirildiğini. Her günlükteki alanlar bir boşlukla ayrılır.

    • STORED AS TEXTFILE LOCATION - Verilerin depolandığı yer (örnek/veri dizini) ve metin olarak depolandığı yer.

    • SELECT - t4 sütununun [ERROR] değerini içerdiği tüm satırların sayısını seçer. Bu değeri içeren üç satır olduğundan bu deyim 3 değerini döndürür.

      Not

      HiveQL deyimleri arasındaki boşlukların + Curl ile kullanıldığında karakteriyle değiştirildiğini fark edin. Sınırlayıcı gibi boşluk içeren tırnak içine alınmış değerler ile +değiştirilmemelidir.

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

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

    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
    

    İş tamamlandıysa, durum BAŞARILI olur.

  5. İşin durumu BAŞARILI olarak değiştirildikten sonra azure blob depolamadan işin sonuçlarını alabilirsiniz. statusdir Sorguyla geçirilen parametre, çıktı dosyasının konumunu içerir; bu durumda, /example/rest. Bu adres, çıktıyı example/curl küme varsayılan depolama alanında dizinde depolar.

    Azure CLI'yi kullanarak bu dosyaları listeleyebilir ve indirebilirsiniz. Azure CLI'yi Azure Depolama ile kullanma hakkında daha fazla bilgi için Azure DEPOLAMA ile Azure CLI kullanma belgesine bakın.

Sonraki adımlar

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

Bu belgede kullanılan REST API hakkında daha fazla bilgi için WebHCat başvuru belgesine bakın.