VPN aracılığıyla HDInsight'ta Apache Spark uygulamalarında uzaktan hata ayıklamak için IntelliJ için Azure Toolkit'i kullanma

Apache Spark uygulamalarında SSH aracılığıyla uzaktan hata ayıklamanızı öneririz. Yönergeler için bkz . SSH aracılığıyla IntelliJ için Azure Toolkit ile HDInsight kümesinde Apache Spark uygulamalarında uzaktan hata ayıklama.

Bu makalede, HDInsight Spark kümesinde Spark işi göndermek ve ardından masaüstü bilgisayarınızdan uzaktan hata ayıklamak için IntelliJ için Azure Toolkit'te HDInsight Araçları'nı kullanma hakkında adım adım yönergeler sağlanır. Bu görevleri tamamlamak için aşağıdaki üst düzey adımları gerçekleştirmeniz gerekir:

  1. Siteden siteye veya noktadan siteye Azure sanal ağı oluşturun. Bu belgedeki adımlarda siteden siteye ağ kullandığınız varsayılır.
  2. HDInsight'ta siteden siteye sanal ağın parçası olan bir Spark kümesi oluşturun.
  3. Küme baş düğümü ile masaüstünüz arasındaki bağlantıyı doğrulayın.
  4. IntelliJ IDEA'da bir Scala uygulaması oluşturun ve bunu uzaktan hata ayıklama için yapılandırın.
  5. Uygulamayı çalıştırın ve uygulamada hata ayıklayın.

Önkoşullar

1. Adım: Azure sanal ağı oluşturma

Bir Azure sanal ağı oluşturmak için aşağıdaki bağlantılardan yönergeleri izleyin ve ardından masaüstü bilgisayarınızla sanal ağ arasındaki bağlantıyı doğrulayın:

2. Adım: HDInsight Spark kümesi oluşturma

Oluşturduğunuz Azure sanal ağının parçası olan Azure HDInsight'ta bir Apache Spark kümesi de oluşturmanızı öneririz. HDInsight'ta Linux tabanlı kümeler oluşturma bölümünde sağlanan bilgileri kullanın. İsteğe bağlı yapılandırmanın bir parçası olarak, önceki adımda oluşturduğunuz Azure sanal ağını seçin.

3. Adım: Küme baş düğümü ile masaüstünüz arasındaki bağlantıyı doğrulama

  1. Baş düğümün IP adresini alın. Küme için Ambari kullanıcı arabirimini açın. Küme dikey penceresinde Pano'yu seçin.

    Select Dashboard in Apache Ambari.

  2. Ambari kullanıcı arabiriminden Konaklar'ı seçin.

    Select Hosts in Apache Ambari.

  3. Baş düğümlerin, çalışan düğümlerinin ve zookeeper düğümlerinin listesini görürsünüz. Baş düğümlerin bir hn* ön eki vardır. İlk baş düğümü seçin.

    Find the head node in Apache Ambari.

  4. Açılan sayfanın alt kısmındaki Özet bölmesinden baş düğümün IP Adresini ve Ana Bilgisayar Adını kopyalayın.

    Find the IP address in Apache Ambari.

  5. Spark işini çalıştırmak ve uzaktan hatalarını ayıklamak istediğiniz bilgisayardaki konak dosyasına baş düğümün IP adresini ve ana bilgisayar adını ekleyin. Bu, ana bilgisayar adının yanı sıra IP adresini kullanarak baş düğümle iletişim kurmanızı sağlar.

    a. Yükseltilmiş izinlere sahip bir Not Defteri dosyası açın. Dosya menüsünde Aç'ı seçin ve konak dosyasının konumunu bulun. Bir Windows bilgisayarda, konum C:\Windows\System32\Drivers\etc\hosts şeklindedir.

    b. Konaklar dosyasına aşağıdaki bilgileri ekleyin:

    # For headnode0
    192.xxx.xx.xx nitinp
    192.xxx.xx.xx nitinp.lhwwghjkpqejawpqbwcdyp3.gx.internal.cloudapp.net
    
    # For headnode1
    192.xxx.xx.xx nitinp
    192.xxx.xx.xx nitinp.lhwwghjkpqejawpqbwcdyp3.gx.internal.cloudapp.net
    
  6. HDInsight kümesi tarafından kullanılan Azure sanal ağına bağladığınız bilgisayardan, ana bilgisayar adının yanı sıra IP adresini kullanarak baş düğümlere ping atabildiğinizi doğrulayın.

  7. SSH kullanarak bir HDInsight kümesine Bağlan yönergeleri izleyerek küme baş düğümüne bağlanmak için SSH kullanın. Küme baş düğümünden masaüstü bilgisayarın IP adresine ping gönderin. Bilgisayara atanan her iki IP adresine bağlantıyı test edin:

    • Ağ bağlantısı için bir tane
    • Azure sanal ağı için bir tane
  8. Diğer baş düğüm için adımları yineleyin.

4. Adım: IntelliJ için Azure Toolkit'te HDInsight Araçları'nı kullanarak apache Spark Scala uygulaması oluşturma ve uzaktan hata ayıklama için yapılandırma

  1. IntelliJ IDEA'ı açın ve yeni bir proje oluşturun. Yeni Proje iletişim kutusunda aşağıdakileri yapın:

    Select the new project template in IntelliJ IDEA.

    a. HDInsight>HDInsight’ta Spark (Scala) seçeneğini belirleyin.

    b. İleri'yi seçin.

  2. Sonraki Yeni Proje iletişim kutusunda aşağıdakileri yapın ve son'u seçin:

    • Bir proje adı ve konum girin.

    • Proje SDK’sı açılır listesinde, Spark 2.x kümesi için Java 1.8’i seçin veya Spark 1.x kümesi için Java 1.7’yi seçin.

    • Spark sürümü açılan listesinde Scala proje oluşturma sihirbazı Spark SDK ve Scala SDK'sı için uygun sürümü tümleştirir. Spark kümesi sürümü 2.0’dan eskiyse Spark 1.x seçeneğini belirleyin. Aksi takdirde, Spark2.x seçeneğini belirleyin. Bu örnek, Spark 2.0.2 (Scala 2.11.8) kullanır.

    Select the project SDK and Spark version.

  3. Spark projesi sizin için otomatik olarak bir yapıt oluşturur. Yapıtı görüntülemek için aşağıdakileri yapın:

    a. Dosya menüsünden Proje Yapısı’nı seçin.

    b. Oluşturulan varsayılan yapıtı görüntülemek için Proje Yapısı iletişim kutusunda Yapıtlar'ı seçin. Artı işaretini (+ ) seçerek kendi yapıtınızı da oluşturabilirsiniz.

    IntelliJ IDEA artifacts create jar.

  4. Projenize kitaplıklar ekleyin. Kitaplık eklemek için aşağıdakileri yapın:

    a. Proje ağacında proje adına sağ tıklayın ve modül Ayarlar Aç'ı seçin.

    b. Proje Yapısı iletişim kutusunda Kitaplıklar'ı seçin, (+) simgesini ve ardından Maven'dan'ı seçin.

    IntelliJ IDEA download library.

    c. Maven Deposundan Kitaplığı İndir iletişim kutusunda aşağıdaki kitaplıkları arayın ve ekleyin:

    • org.scalatest:scalatest_2.10:2.2.1
    • org.apache.hadoop:hadoop-azure:2.7.1
  5. Küme baş düğümünden ve core-site.xml kopyalayıp yarn-site.xml projeye ekleyin. Dosyaları kopyalamak için aşağıdaki komutları kullanın. Cygwin'i kullanarak aşağıdaki scp komutları çalıştırarak küme baş düğümlerinden dosyaları kopyalayabilirsiniz:

    scp <ssh user name>@<headnode IP address or host name>://etc/hadoop/conf/core-site.xml .
    

    Masaüstündeki konaklar dosyası için küme baş düğümü IP adresini ve konak adlarını zaten eklediğimizden, komutları aşağıdaki şekilde kullanabiliriz scp :

    scp sshuser@nitinp:/etc/hadoop/conf/core-site.xml .
    scp sshuser@nitinp:/etc/hadoop/conf/yarn-site.xml .
    

    Bu dosyaları projenize eklemek için, bunları proje ağacınızdaki /src klasörünün altına kopyalayın, örneğin<your project directory>\src.

  6. core-site.xml Aşağıdaki değişiklikleri yapmak için dosyayı güncelleştirin:

    a. Şifrelenmiş anahtarı değiştirin. Dosya, core-site.xml kümeyle ilişkilendirilmiş depolama hesabının şifrelenmiş anahtarını içerir. Projeye eklediğiniz dosyada core-site.xml , şifrelenmiş anahtarı varsayılan depolama hesabıyla ilişkili gerçek depolama anahtarıyla değiştirin. Daha fazla bilgi için bkz . Depolama hesabı erişim anahtarlarını yönetme.

    <property>
            <name>fs.azure.account.key.hdistoragecentral.blob.core.windows.net</name>
            <value>access-key-associated-with-the-account</value>
    </property>
    

    b. öğesinden core-site.xmlaşağıdaki girdileri kaldırın:

    <property>
            <name>fs.azure.account.keyprovider.hdistoragecentral.blob.core.windows.net</name>
            <value>org.apache.hadoop.fs.azure.ShellDecryptionKeyProvider</value>
    </property>
    
    <property>
            <name>fs.azure.shellkeyprovider.script</name>
            <value>/usr/lib/python2.7/dist-packages/hdinsight_common/decrypt.sh</value>
    </property>
    
    <property>
            <name>net.topology.script.file.name</name>
            <value>/etc/hadoop/conf/topology_script.py</value>
    </property>
    

    c. Dosyayı kaydedin.

  7. Uygulamanızın ana sınıfını ekleyin. Proje Gezgini'nden src'ye sağ tıklayın, Yeni'nin üzerine gelin ve Scala sınıfı'nı seçin.

    IntelliJ IDEA Select the main class.

  8. Yeni Scala Sınıfı Oluştur iletişim kutusunda bir ad girin, Tür kutusunda Nesne'yi seçin ve ardından Tamam'ı seçin.

    IntelliJ IDEA Create new Scala class.

  9. MyClusterAppMain.scala Dosyasına aşağıdaki kodu yapıştırın. Bu kod Spark bağlamını oluşturur ve nesnesinden SparkSample bir executeJob yöntem açar.

    import org.apache.spark.{SparkConf, SparkContext}
    
    object SparkSampleMain {
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("SparkSample")
                                    .set("spark.hadoop.validateOutputSpecs", "false")
        val sc = new SparkContext(conf)
    
        SparkSample.executeJob(sc,
                            "wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv",
                            "wasb:///HVACOut")
        }
    }
    
  10. adlı *SparkSampleyeni bir Scala nesnesi eklemek için 8. ve 9. adımları yineleyin. Aşağıdaki kodu bu sınıfa ekleyin. Bu kod HVAC.csv verileri okur (tüm HDInsight Spark kümelerinde kullanılabilir). CSV dosyasındaki yedinci sütunda yalnızca bir basamak içeren satırları alır ve ardından çıktıyı kümenin varsayılan depolama kapsayıcısı altında /HVACOut dosyasına yazar.

    import org.apache.spark.SparkContext
    
    object SparkSample {
        def executeJob (sc: SparkContext, input: String, output: String): Unit = {
        val rdd = sc.textFile(input)
    
        //find the rows which have only one digit in the 7th column in the CSV
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        val s = sc.parallelize(rdd.take(5)).cartesian(rdd).count()
        println(s)
    
        rdd1.saveAsTextFile(output)
        //rdd1.collect().foreach(println)
         }
    }
    
  11. adlı RemoteClusterDebuggingyeni bir sınıf eklemek için 8. ve 9. adımları yineleyin. Bu sınıf, uygulamalarda hata ayıklamak için kullanılan Spark test çerçevesini uygular. Sınıfına RemoteClusterDebugging aşağıdaki kodu ekleyin:

        import org.apache.spark.{SparkConf, SparkContext}
        import org.scalatest.FunSuite
    
        class RemoteClusterDebugging extends FunSuite {
    
         test("Remote run") {
           val conf = new SparkConf().setAppName("SparkSample")
                                     .setMaster("yarn-client")
                                     .set("spark.yarn.am.extraJavaOptions", "-Dhdp.version=2.4")
                                     .set("spark.yarn.jar", "wasb:///hdp/apps/2.4.2.0-258/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar")
                                     .setJars(Seq("""C:\workspace\IdeaProjects\MyClusterApp\out\artifacts\MyClusterApp_DefaultArtifact\default_artifact.jar"""))
                                     .set("spark.hadoop.validateOutputSpecs", "false")
           val sc = new SparkContext(conf)
    
           SparkSample.executeJob(sc,
             "wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv",
             "wasb:///HVACOut")
         }
        }
    

    Dikkat edilmesi gereken birkaç önemli nokta vardır:

    • için .set("spark.yarn.jar", "wasb:///hdp/apps/2.4.2.0-258/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar")Spark derleme JAR'sinin belirtilen yolda küme depolamada kullanılabilir olduğundan emin olun.
    • için setJars, yapıt JAR'sinin oluşturulduğu konumu belirtin. Genellikle , şeklindedir <Your IntelliJ project directory>\out\<project name>_DefaultArtifact\default_artifact.jar.
  12. *RemoteClusterDebugging sınıfında anahtar sözcüğüne test sağ tıklayın ve ardından RemoteClusterDebugging Yapılandırması Oluştur'u seçin.

    IntelliJ IDEA Create a remote configuration.

  13. RemoteClusterDebugging Yapılandırması Oluştur iletişim kutusunda yapılandırma için bir ad girin ve test adı olarak Test türü'nü seçin. Diğer tüm değerleri varsayılan ayarlar olarak bırakın. Uygula’yı ve sonra Tamam’ı seçin.

    Create RemoteClusterDebugging Configuration.

  14. Şimdi menü çubuğunda uzaktan çalıştırma yapılandırması açılan listesini görmeniz gerekir.

    IntelliJ The Remote run drop-down list.

5. Adım: Uygulamayı hata ayıklama modunda çalıştırma

  1. IntelliJ IDEA projenizde öğesini açın SparkSample.scala ve yanında val rdd1bir kesme noktası oluşturun. Açılır menü için Kesme Noktası Oluştur menüsünde executeJob işlevindeki satırı seçin.

    IntelliJ IDEA Add a breakpoint.

  2. Uygulamayı çalıştırmak için Uzaktan Çalıştırma yapılandırması açılan listesinin yanındaki Çalıştırma hatalarını ayıkla düğmesini seçin.

    IntelliJ IDEA Select the Debug Run button.

  3. Program yürütme kesme noktasına ulaştığında, alt bölmede bir Hata Ayıklayıcısı sekmesi görürsünüz.

    IntelliJ IDEA View the Debugger tab.

  4. Saat eklemek için (+) simgesini seçin.

    IntelliJ debug-add-watch-variable.

    Bu örnekte, değişken rdd1 oluşturulmadan önce uygulama bozuldu. Bu saati kullanarak değişkenindeki rddilk beş satırı görebiliriz. Gir'i seçin.

    IntelliJ Run the program in debug mode.

    Önceki görüntüde gördüğünüz şey, çalışma zamanında terabaytlar kadar veriyi sorgulayıp uygulamanızın ilerlemesinde hata ayıklaması yapabileceğinizdir. Örneğin, önceki görüntüde gösterilen çıktıda, çıkışın ilk satırının bir üst bilgi olduğunu görebilirsiniz. Bu çıkışa bağlı olarak, gerekirse üst bilgi satırını atlamak için uygulama kodunuzu değiştirebilirsiniz.

  5. Artık uygulama çalıştırmanıza devam etmek için Programı Sürdür simgesini seçebilirsiniz.

    IntelliJ IDEA Select Resume Program.

  6. Uygulama başarıyla tamamlanırsa aşağıdaki gibi bir çıktı görmeniz gerekir:

    IntelliJ IDEA debugger console output.

Sonraki adımlar

Senaryolar

Uygulamaları oluşturma ve çalıştırma

Araçlar ve uzantılar

Kaynakları yönetme