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
- HDInsight üzerinde bir Apache Hadoop kümesi. Bkz. Azure portal kullanarak Apache Hadoop kümeleri oluşturma.
Şunlardan biri:
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
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=
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/v1
tüm istekler için aynıdır.Aşağıdaki JSON'a benzer bir yanıt alırsınız:
{"version":"v1","status":"ok"}
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
.-
-d:
İş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
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"
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"}
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
.İş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
İş tamamlandıysa döndürülen durum olur
SUCCEEDED
.İş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/curl
kü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:
- HDInsight üzerinde Apache Hadoop ile MapReduce kullanma
- HDInsight üzerinde Apache Hadoop ile Apache Hive kullanma
Bu makalede kullanılan REST arabirimi hakkında daha fazla bilgi için bkz. WebHCat Başvurusu.