HDInsight Spark kümesine uzak işleri göndermek için Apache Spark REST API’sini kullanma

Uzak işleri bir Azure HDInsight Spark kümesine göndermek için kullanılan Apache Spark REST API'sinin Apache Livy'yi nasıl kullanacağınızı öğrenin. Ayrıntılı belgeler için bkz. Apache Livy.

Livy'yi kullanarak etkileşimli Spark kabukları çalıştırabilir veya Spark'ta çalıştırılacak toplu işleri gönderebilirsiniz. Bu makalede, toplu işleri göndermek için Livy'nin kullanılması anlatılıyor. Bu makaledeki kod parçacıkları Livy Spark uç noktasına REST API çağrıları yapmak için cURL kullanır.

Önkoşullar

HDInsight üzerinde bir Apache Spark kümesi. Yönergeler için bkz. Azure HDInsight'ta Apache Spark kümeleri oluşturma.

Apache Livy Spark toplu işi gönderme

Toplu iş göndermeden önce, uygulama jar dosyasını kümeyle ilişkili küme depolama alanına yüklemeniz gerekir. Bunu yapmak için, bir komut satırı yardımcı programı olan AzCopy’yi kullanabilirsiniz. Verileri karşıya yüklemek için kullanabileceğiniz çeşitli istemciler vardır. Bunlar hakkında daha fazla bilgi için bkz. HDInsight'ta Apache Hadoop işleri için verileri karşıya yükleme.

curl -k --user "admin:password" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"

Örnekler

  • Jar dosyası küme depolama (WASBS) üzerindeyse

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    
  • Jar dosya adını ve sınıf adını bir giriş dosyasının parçası olarak geçirmek istiyorsanız (bu örnekte input.txt)

    curl -k  --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

Kümede çalışan Livy Spark toplu işleri hakkında bilgi alma

Söz dizimi:

curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"

Örnekler

  • Kümede çalışan tüm Livy Spark toplu işlemlerini almak istiyorsanız:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Belirli bir toplu iş kimliğine sahip belirli bir toplu işlemi almak istiyorsanız

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
    

Livy Spark toplu işini silme

curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"

Örnek

Toplu iş kimliğine 5sahip bir toplu iş siliniyor.

curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"

Livy Spark ve yüksek kullanılabilirlik

Livy, kümede çalışan Spark işleri için yüksek kullanılabilirlik sağlar. Aşağıda birkaç örnek verilmiştir.

  • Bir Spark kümesine uzaktan bir iş gönderdikten sonra Livy hizmeti kapanırsa, iş arka planda çalışmaya devam eder. Livy yedeklendiğinde, işin durumunu geri yükler ve geri bildirir.
  • HDInsight için Jupyter Notebook'lar arka uçta Livy tarafından desteklenir. Bir not defteri Spark işi çalıştırıyorsa ve Livy hizmeti yeniden başlatılırsa, not defteri kod hücrelerini çalıştırmaya devam eder.

Bana bir örnek göster

Bu bölümde, Livy Spark'ı kullanarak toplu iş göndermek, işin ilerleme durumunu izlemek ve ardından silmek için örneklere göz atacağız. Bu örnekte kullandığımız uygulama, Tek başına Scala uygulaması oluşturma ve HDInsight Spark kümesinde çalıştırma makalesinde geliştirilen uygulamadır. Buradaki adımlarda şunlar varsayılır:

  • Uygulama jar dosyasını kümeyle ilişkilendirilmiş depolama hesabına zaten kopyalamıştınız.
  • Bu adımları denediğiniz bilgisayarda CuRL yüklüdür.

Aşağıdaki adımları gerçekleştirin:

  1. Kullanım kolaylığı için ortam değişkenlerini ayarlayın. Bu örnek bir Windows ortamını temel alır, ortamınız için değişkenleri gerektiği gibi düzeltin. ve PASSWORD değerlerini uygun değerlerle değiştirinCLUSTERNAME.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Livy Spark'ın kümede çalıştığını doğrulayın. Bunu, çalışan toplu iş listesini alarak yapabiliriz. Livy'yi ilk kez kullanarak bir iş çalıştırıyorsanız, çıkış sıfır döndürmelidir.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
    

    Aşağıdaki kod parçacığına benzer bir çıkış almalısınız:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:47:53 GMT
    < Content-Length: 34
    <
    {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Çıkıştaki son satırın toplam:0 olduğunu ve bunun çalışan toplu iş olmadığını önerdiğine dikkat edin.

  3. Şimdi bir toplu iş gönderelim. Aşağıdaki kod parçacığı, jar adını ve sınıf adını parametre olarak geçirmek için bir giriş dosyası (input.txt) kullanır. Bu adımları bir Windows bilgisayarından çalıştırıyorsanız, önerilen yaklaşım giriş dosyası kullanmaktır.

    curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

    Dosya input.txt parametreleri aşağıdaki gibi tanımlanır:

    { "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
    

    Aşağıdaki kod parçacığına benzer bir çıktı görmeniz gerekir:

    < HTTP/1.1 201 Created
    < Content-Type: application/json; charset=UTF-8
    < Location: /0
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:51:30 GMT
    < Content-Length: 36
    <
    {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Çıkışın son satırında state:starting ifadesinin nasıl belirtildiğine dikkat edin. Ayrıca id:0 yazıyor. Burada 0 , toplu iş kimliğidir.

  4. Artık toplu iş kimliğini kullanarak bu özel toplu işlemin durumunu alabilirsiniz.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Aşağıdaki kod parçacığına benzer bir çıktı görmeniz gerekir:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:54:42 GMT
    < Content-Length: 509
    <
    {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://myspar.lpel.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Çıkışta artık işin başarıyla tamamlandığına işaret eden state:success gösterilir.

  5. İsterseniz, artık toplu işlemi silebilirsiniz.

    curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Aşağıdaki kod parçacığına benzer bir çıktı görmeniz gerekir:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Sat, 21 Nov 2015 18:51:54 GMT
    < Content-Length: 17
    <
    {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Çıktının son satırı toplu işlemin başarıyla silindiğini gösterir. Bir işi çalışırken silmek, işi de öldürür. Tamamlanmış, başarılı veya başka bir şekilde tamamlanmış bir işi silerseniz, iş bilgileri tamamen silinir.

HDInsight 3.5 sürümünden başlayarak Livy yapılandırmasına Güncelleştirmeler

HDInsight 3.5 kümeleri ve üstü, varsayılan olarak örnek veri dosyalarına veya jar dosyalarına erişmek için yerel dosya yollarının kullanımını devre dışı bırakır. Kümeden jar dosyalarına wasbs:// veya örnek veri dosyalarına erişmek yerine yolu kullanmanızı öneririz.

Azure sanal ağı içindeki bir küme için Livy işleri gönderme

Azure Sanal Ağ içinden bir HDInsight Spark kümesine bağlanırsanız, kümedeki Livy'ye doğrudan bağlanabilirsiniz. Böyle bir durumda Livy uç noktasının URL'si olur http://<IP address of the headnode>:8998/batches. Burada 8998 , Livy'nin küme baş düğümünde çalıştığı bağlantı noktasıdır. Genel olmayan bağlantı noktalarındaki hizmetlere erişme hakkında daha fazla bilgi için bkz. HDInsight üzerinde Apache Hadoop hizmetleri tarafından kullanılan bağlantı noktaları.

Sonraki adımlar