Spark uygulamaları, Uber JVM Profiler gibi görselleştirme araçlarıyla nasıl izlenir?

Anahtar noktaları

  • Spark uygulamalarını sürekli ve güvenilir bir şekilde çalıştırmak zorlu bir iştir ve iyi bir performans izleme sistemi gerektirir.

-Bir performans izleme sistemi tasarlarken, sunucu ve uygulama ölçümlerini toplarken, ölçümleri bir zaman serisi veritabanında depolarken ve veri görselleştirme için gösterge tabloları sağlarken üç hedef vardır.

  • Spark uygulamalarını izlemek için Uber JVM Profiler kullanılır. Kullanılan diğer teknolojiler InfluxDB (zaman serisi verilerini depolamak için kullanılır) ve Grafana'dır (veri görselleştirme aracı).
  • Performans izleme sistemleri, DevOps ekiplerinin uygulama uyumluluğunu ve SLA'yı karşılamak için sistemi etkili bir şekilde izlemesine yardımcı olabilir.

Birçok endüstri, büyük veri işleme uygulamaları oluşturmak için Apache Spark kullanıyor. Spark, bu tür uygulamalar için örtük veri paralelliği ve hata toleransı sağlar. Bu tür uygulamalar, akışa, toplu işlemeye, SQL veri kümesi işlemeye veya makine öğrenmesine dayalı olabilir. Spark, bu uygulamaları hızlı bir bellek içi veri işleme motoru aracılığıyla bir kümede çalıştırır ve veri ardışık düzenindeki büyük miktarda veriyi dönüştürür ve işler. Bu uygulamaları sürekli ve güvenilir bir şekilde çalıştırmak, iyi bir performans izleme sistemi gerektiren zorlu bir görevdir. Spark, hayatın her kesiminde yaygın olarak benimsendiğinden, performans izleme, ölçüm analizi ve Spark uygulamalarının ayarlanması konuları giderek daha fazla dikkat çekmiştir. Uber kısa süre önce JVM Profiler'ını açık kaynaklı hale getirdi. Bu makalede, Uber JVM Profiler'ın nasıl genişletileceğini ve Spark uygulamalarının performans ölçümlerini izlemek ve raporlamak için InfluxDB ve Grafana ile birlikte nasıl kullanılacağını tartışacağız.

Spark uygulama performans izleme sistemi

Mevcut kaynakların kullanımını en üst düzeye çıkarmak ve olası sorunları olabildiğince erken tespit etmek için bir performans izleme sistemine ihtiyaç vardır. İzleme sisteminin, çalışan sistem için kapsamlı bir durum raporu sağlaması ve bir bileşen arızalandığında bir alarm göndermesi gerekir. Bir Spark kümesinde büyük ölçekli dağıtılmış sistemleri ve Hadoop ekosisteminin farklı bileşenlerini çalıştırmamız gerektiğinde, ayrıntılı bir performans izleme sistemine duyulan ihtiyaç vazgeçilmez hale gelir. Spark uygulamaları, paylaşılan kaynaklardaki verilerin dağıtılmış olarak işlenmesini gerçekleştirir ve bu da DevOps ekibinin çalışmasını çok karmaşık hale getirir. DevOps ekibi, mevcut kaynakları etkin bir şekilde yönetmeli ve kesinti sürelerini önlemek için sistemin farklı bileşenlerini yakından izlemelidir. Performans izleme sistemi tarafından sağlanan tam yığın görünürlüğü, DevOps ekiplerinin sistem davranışını anlamasına ve üretim sorunlarına hızla tepki vermesine yardımcı olur. Bu, Spark uygulamalarının güvenilirliğini, ölçeklenebilirliğini ve performansını garanti eder.

Bu karmaşık sistem için ideal performans izleme sistemi aşağıdaki özelliklere sahip olmalıdır:

  • İzleme sistemi, kümedeki her bileşen hakkında ayrıntılı bir görünürlük sağlamalıdır. CPU, bellek, depolama, yerel dosyalar ve HDFS disk G / Ç, yığın izleri vb. Hakkında ayrıntılı ölçümler alabilmeliyiz. Bu göstergeler, hatalı durumları hızlı bir şekilde teşhis etmeye yardımcı olur.
  • İzleme sistemi, Spark üzerinde çalışan uygulamalar için kod düzeyinde ölçümler (yürütme süresi, yöntem parametreleri vb.) Sağlamalıdır. Bu, daha yavaş yöntemleri, disk etkin noktalarını vb. Tanımlamaya yardımcı olacaktır.
  • İzleme sistemi göstergeleri her saniye depolamalı ve farklı zaman dilimlerinde verilere göz atarak göstergeleri analiz etmemize izin vermelidir. Bu veriler üzerinde ikincil ve ikincil anatomi yapabilmeliyiz. Veri saklama süresini kontrol edebilmeli ve gerektiğinde geçmiş verilere kolayca erişip analiz edebilmeliyiz. Bu, mevcut eğilimleri analiz etmeye ve gelecekteki eğilimleri tahmin etmeye yardımcı olur.
  • İzleme sistemi, sürekli olarak toplanan çok sayıda göstergeden anlamlı bilgilerin çıkarılması için etkili yöntemler sağlamalıdır. Bu, verileri sorgulamak, verileri filtrelemek, değerleri toplamak ve özel analiz uygulamak için SQL veya API kullanmayı içerir. Bu, verileri daha hızlı dönüştürmeye ve analiz etmeye yardımcı olur.
  • İzleme sistemi, metrik veri analizinden elde edilen bilgilere kolayca erişebilmeli, verileri gösterge tablosunda görüntülemek için farklı formlar (grafikler vb.) Kullanabilmeli ve verileri ana bilgisayar, zaman veya işe göre sınıflandırabilmeli ve kullanıcı daha da ileri gidebilmelidir. Kullanıcı tanımlı eşikler için alarmları ve bildirimleri yapılandırabilen farklı veri noktalarının derinlemesine analizi. Bu, DevOps ekibinin ve kuruluştaki diğer paydaşların gerektiğinde ihtiyaç duydukları bilgileri hızlı bir şekilde elde etmelerine yardımcı olur.

Bu yazıda, bir performans izleme sistemi geliştirmek için açık kaynaklı araçları ve teknolojileri kullanacağız. Spark uygulama performans izleme sisteminin tasarımının üç amacı vardır:

  • Sistemin (sürücüler ve yöneticiler) performans göstergelerini ve uygulama kodunu toplayın;
  • Zamanlama analizi için bu göstergeleri kalıcı depolamada saklayın (toplu ve gerçek zamanlı);
  • Grafikler şeklinde metrik raporlar oluşturun.
  • Apache Spark, göstergeler için bir web-ui ve REST API sağlar. Spark ayrıca konsol, JMX, Servlet, Graphite vb. Dahil olmak üzere çeşitli alıcılar sağlar. Dr-fil, sparklint, prometheus vb. Gibi başka açık kaynak performans izleme araçları da mevcuttur. Bu araçların sağladığı göstergeler temel olarak sunucu düzeyinde göstergelerdir ve bunlardan bazıları uygulama bilgilerini de sağlar.

    Uber JVM Profiler, sunucu düzeyinde ve uygulama ölçümlerini aynı anda toplar. Sürücü, yürütücü veya herhangi bir JVM'den tüm ölçümleri (cpu, bellek, arabellek havuzu vb.) Toplayabilir. Mevcut kodu değiştirmeden geliştirilebilir, böylece yöntemler, parametreler ve yürütme süresi hakkında ölçümler toplayabilir. Zaman serisi analizi için ölçümleri saklamak için güçlü bir zaman serisi veritabanı olan InfluxDB'yi kullanacağız. Uber JVM Profiler'ı genişleteceğiz ve InfluxDB'ye yeni bir Reporter ekleyeceğiz, böylece ölçüm verileri HTTP API aracılığıyla kaydedilebilir. Grafik gösterge tabloları için, InfluxDB'den gösterge verilerini sorgulayan Grafana'yı kullanacağız.

    Aşağıda, Spark uygulama performans izleme sisteminde kullanılan araçların ve tekniklerin ayrıntıları verilmiştir.

    Uber JVM Profiler

    Uber JVM Profiler, kümedeki farklı düğümlerden performans göstergelerini ve kaynak kullanım göstergelerini toplayan dağıtılmış bir profil oluşturucudur. Uygulamayla birlikte bir Java aracısı olarak çalışır ve farklı ölçümleri toplar. Bu göstergeleri daha fazla analiz ve raporlama için belirlenen Raportörde yayınlar. Uber JVM Profiler, Spark uygulamalarını analiz etmek için geliştirilmiştir, ancak herhangi bir JVM tabanlı uygulamayı analiz etmek için de kullanılabilir. Uber JVM Profiler'ın üç ana bileşeni vardır:

    Profiler: Uber JVM Profiler, aşağıdaki Profiler'ı içerir:

    • CpuAndMemory Profiler-toplama arabellek havuzu (doğrudan ve eşlenmiş), çöp toplama (sayma ve zaman), yığın bellek (kaydedilmiş ve kullanılmış), yığın olmayan bellek (kaydedilmiş ve kullanılmış), CPU (yükleme ve zaman), bellek Havuz ayrıntıları (EdenSpace, SurvivorSpace, TenuredGen, CodeCache, CompressedClassSpace, Metaspace), vmHWM ve vmRSS ölçümleri.
    • IO Profiler-CPU istatistiklerini (boşta, iyi, sistem, kullanıcı, iowait) ve disk IO okuma / yazma baytlarını toplayın.
    • Stacktrace Profiler-Collect iş parçacığı adı, iş parçacığı durumu ve yığın izleme göstergeleri.
    • ProcessInfo Profiler aracı sürümünü, JVM sınıf yolunu, JVM giriş parametrelerini ve xmxBytes ölçümlerini toplar.
    • MethodDuration Profiler-sınıf adı, yöntem adı ve işlem adı dahil olmak üzere yöntem yürütme süresi ölçümleri.
    • MethodArgument Profiler, sınıf adı, yöntem adı ve işlem adı dahil olmak üzere yöntem parametreleri için ölçümleri toplar.

    Transformer: Bu Sınıf Dosya Transformatörü, Java yöntemlerinin bayt kodunu geliştirmek için kullanılır.

    Muhabir: Mevcut Muhabirler şunları içerir:

    • KafkaOutputReporter-Performans ölçümlerini Kafka konularına gönderin.
    • Bir dosyaya FileOutputReporter-yazma göstergeleri.
    • ConsoleOutputReporter-metrikleri konsola gönderin.
    • RedisOutputReporter-Göstergeleri Redis veritabanına kaydedin.

    JVM Profiler hakkında daha ayrıntılı bilgi için lütfen Uber'in blog gönderisine bakın.

    InfluxDB ve Grafana

    InfluxDB: InfluxDB, büyük miktarlarda zaman damgalı veriyi depolamak ve sorgulamak için açık kaynaklı bir zaman serisi veritabanıdır. Bu veriler IoT sensör verileri, gerçek zamanlı analiz verileri, uygulama gösterge verileri veya DevOps izleme verileri olabilir. Eski verilerin süresinin dolmasına izin vererek ve eski verileri silerek otomatik veri yaşam döngüsü yönetimi gerçekleştirir. SQL benzeri bir sorgu dili, HTTP API ve istemci kitaplığı aracılığıyla yazma ve sorgulama işlevleri sağlar. Lütfen buradan daha fazla bilgi alın.

    Grafana: Grafana, açık kaynaklı bir ölçüm panosu ve grafik düzenleyicidir. Grafana ayrıca uyarıları ve bildirimleri de destekler. Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch ve CloudWatch gibi birçok veri kaynağını destekler. Grafana web sitesinde birçok gösterge tablosu ve eklenti (hem açık kaynak hem de ticari) bulunabilir. Grafana hakkında daha ayrıntılı bilgi için lütfen bu web sitesini ziyaret edin.

    sistem yapısı

    Spark uygulamaları, binlerce düğüme kadar birkaç düğüm içerebilen bir küme ağında çalışır. Bu dağıtılmış sistemden ölçümleri toplamak ve bunları daha fazla analiz için diğer sistemlere göndermek için, gevşek bağlantı ve hata toleransı olan bir mimariye ihtiyacımız var. Metrikleri Kafka konularına yayınlamak en iyi çözümlerden biridir. Uber JVM Profiler, bu amaçla kullanılabilen "KafkaOutputReporter" ile birlikte gelir. Diğer bir çözüm ise InfluxDB kullanmaktır. InfluxDB, veritabanını sorgulamak ve ona yazmak için kullanılabilen bir HTTP API sağlar. Bu API, Temel ve JWT belirteç kimlik doğrulamasını destekler ve HTTPS erişimini destekler. Bu makaledeki "InfluxDBOutputReporter", farklı Profilciler tarafından toplanan ölçümleri depolamak için Write HTTP Endpoint'i çağıracaktır. Grafana, InfluxDB için zengin veri kaynağı eklentileri sağlar. Grafana, InfluxDB'den gösterge verilerini almak için Sorgu HTTP Uç Noktasını kullanır ve verileri gösterge tablosunda grafikler ve tablolar şeklinde görüntüler. Bu grafikler ve tablolar, Grafana'da ayarlanabilen sabit zaman aralıklarında otomatik olarak yenilenir.

    Uber JVM Profiler, InfluxDB ve Grafana kullanan Spark uygulama performans izleme sisteminin mimari diyagramı aşağıdaki Şekil 1'de gösterilmektedir.

    Şekil 1. Performans izleme sisteminin mimari diyagramı

    Teknoloji ve araçlar

    Aşağıdaki tablo, performans izleme sistemi tarafından kullanılan teknikleri ve araçları listelemektedir.

    Bu araçların nasıl kurulacağını ve yapılandırılacağını öğrenmek için lütfen ilgili belgelere bakın.

    Tasarım ve Uygulama

    Aşağıdaki bölüm, Spark uygulama performans izleme sisteminin tasarım ve uygulama ayrıntılarını tanıtmaktadır. Uber JVM Profiler, sürücülerden ve uygulayıcılardan ölçümler toplar. Bu ölçümler, role, processUuid ve host gibi ayrıntılı bilgileri içerir. Bu bilgiler, farklı sistemleri tanımlamak ve bu sistemlerin göstergelerini analiz etmek için çok kullanışlıdır. InfluxDB'de, bu bilgileri farklı yürütme programlarının performans göstergelerini sorgulamak için kullanabiliriz. Sorgu performansını iyileştirmek için InfluxDB etiketine processUuid ekleyebiliriz. İlk olarak, InfluxDB'de "metrikler" veritabanını oluşturacağız, ardından JVM Profiler kod tabanına "InfluxDBOutputReporter" ekleyeceğiz ve son olarak Grafana panosunu yapılandıracağız.

    InfluxDB'de metrik veritabanı oluşturun

    InfluxDB sunucusunu başlatın, bağlantı noktası varsayılan olarak 8086'dır. Ubuntu sisteminde bir terminal açın ve "Influxd" komutunu çalıştırın.

    / kullanıcı / bin $ sudo influxd

    Sunucu başlatıldıktan sonra, başka bir terminalde "akış" başlatın. Ardından "metrikler" veritabanını oluşturmak için komutu yürütün.

    / kullanıcı / bin $ sudo akışı

    VERİTABANI metrikleri OLUŞTUR

    InfluxDBOutputReporter'ı uygulayın

    "InfluxDBOutputReporter" ı JVM-Profile kod tabanında uygulayacağız. Bu bölümde tartışılan uygulama ayrıntıları için lütfen GitHub'daki "Influxdb_reporter" dalının InfluxDBOutputReporter.java dosyasına bakın.

    • InfluxDB veritabanı sunucusuyla Influxdb-java kitaplığı aracılığıyla etkileşim kuruyoruz. InfluxDB veritabanını HTTP API üzerinden okur ve yazar. Pom.xml dosyasını güncelleyin ve Influxdb-java bağımlılığını ekleyin.
    • InfluxDBOutputReporter sınıfında InfluxDB veritabanı sunucusunun ana bilgisayar, bağlantı noktası ve veritabanı özelliklerini tanımlayın. Bu özniteliklerin varsayılan değerleri sırasıyla "127.0.0.1", "8086" ve "metrikler" dir. Influxdb-java kitaplığı tarafından sağlanan API'yi InfluxDB'ye bağlanmak için kullanın.
    • InfluxDBOutputReporter sınıfının com.uber.profiling.Reporter arabirimini uygulaması gerekir. Genel void raporunu geçersiz kılmamız gerekiyor (String profilerName, Map < Dize, Nesne > metrics) yöntemi ve genel void close () yöntemi. "ProfilerName", "metrikler" veritabanındaki metriğin adı olacaktır.
    • InfluxDB, anahtar-değer çiftlerini saklamak için satır protokolünü kullandığından, Profiler tarafından gönderilen Haritayı işlememiz gerekir. < Dize, Nesne > Verileri ölçün ve bunları InfluxDB'de saklanabilecek bir formata dönüştürün. Göstergedeki (varsa) "name" özniteliğinin değerini alan adı olarak kullanabiliriz. "Ad" özelliği mevcut değilse, sayacın değeri kullanılabilir. InfluxDB, sorgu alanlarında normal ifadeleri destekler, bu nedenle bu alanları sorgulamak bir sorun değildir.
    • Point ve Batchpoint oluşturmak için Influxdb-java kütüphanesi tarafından sağlanan API'yi kullanın ve Batchpoint'leri InfuxDB veritabanına yazın.
    • Yaml dosyasından veritabanı bağlantı bilgilerini okumak için, com.uber.profiling.YamlConfigProvider ve com.uber.profiling.Argument sınıflarını kullanmanız gerekir. Argument sınıfındaki InfluxDBOutputReporter sınıfına bir başvuru ekleyin ve yaml dosyasında tanımlanan özellikleri geçirmek için setProperties yöntemini çağırın. GitHub'daki Resources / Influxdb.yaml, örnek bir yaml dosyasıdır.

    Grafana'da veri kaynakları ve gösterge tabloları ekleyin

    Bu bölümde, Grafana'da bir metrik veri grafiği eklemek için gerekli adımlar açıklanacaktır.

    Grafana sunucusunu başlatın. Ubuntu'da aşağıdaki komutları çalıştırabiliriz. Varsayılan bağlantı noktası numarası 3000'dir.

    sudo hizmeti grafana sunucusu başlangıcı

    Tarayıcınızda http: // localhost: 3000 / 'i açın ve InfluxDB için bir veri kaynağı oluşturun. Adı "InfluxDBDataSource" olarak, Türü "InfluxDB" olarak ayarlayın, InfluxDB'nin varsayılan URL'si "http: // localhost: 8086" ve veritabanı adı "metrics" dir.

    Yeni bir gösterge tablosu oluşturmak için "Grafik" i tıklayın ve bir sorgu eklemek için "Düzenle" yi tıklayın. Aşağıda örnek bir sorgu verilmiştir.

    Kodu kopyala

    Committed olarak "heapMemoryComitted" öğesini, "metrics" den "heapMemoryTotalUsed" öğesini seçin. > şimdi () - 5m

    Grafana, sorguda aktarılabilen şablon değişkenlerini tanımlamak için bazı seçenekler sunar. Bu, kontrol panelinde birden çok yürütmeden gelen verileri görüntülemek için çok kullanışlıdır. Örneğin, "executorProcessUuid" ve "timeInterval" için değişkenler oluşturabilir ve bunları aşağıda gösterildiği gibi sorguda kullanabiliriz.

    Kodu kopyala

    Committed olarak "heapMemoryComlied", "metrics" den "heapMemoryTotalUsed" öğesini seçin. "autogen". "CpuAndMemory" burada "processUuid" = ~ / ^ $ executorProcessUuid $ / AND time > now () - $ timeInterval

    GitHub, bir JSON örnek dosyası Spark-Metrics-Dashboar sağlar. Bu dosya Grafana sunucusuna aktarılabilir. Tarayıcınızda http: // localhost: 3000 / dashboard / import sayfasını açın ve ".json Dosyası Yükle" yi tıklayın.

    Derleyin ve dağıtın

    Bu bölüm, bir performans izleme sistemi oluşturma ve dağıtma adımlarını tanıtacaktır. Uygulama kodu GitHub'daki "Influxdb_reporter" dalından klonlanabilir.

    "InfluxDBOutputReporter" ile bir JVM Profiler oluşturmak için aşağıdaki komutu kullanın.

    mvn temiz paket

    Maven tarafından oluşturulan JVM Profiler-0.0.9.jar dosyasını bir dizine kopyalayın (örneğin, / opt / profiler). Influxdb.yaml'yi de bu dizine koyabiliriz.

    Profil oluşturma için Apache Spark ile birlikte gelen JavaNetworkWordCount uygulamasını kullanacağız. Kaynak kodu /spark-2.3.1-bin-hadoop2.7/examples/src/main/java/org/apache/spark/examples/streaming içinde bulunur.

    JavaNetworkWordCount'u çalıştırmak için aşağıdaki komutu kullanarak Netcat sunucusunu çalıştırmamız gerekiyor.

    nc -lk 9999

    /Spark-2.3.1-bin-hadoop2.7/sbin dizinine gidin ve Master'ı başlatmak için aşağıdaki komutu kullanın.

    ./start-master.sh

    Ana URL'yi günlük dosyasından alabiliriz. Çalışanı başlatmak için bu URL'yi komuta aktarın.

    ./start-slave.sh -c 2 spark: //192.168.1.6: 7077

    /Spark-2.3.1-bin-hadoop2.7/bin dizinine gidin ve aşağıdaki komutları çalıştırın. Bu komut JavaNetworkWordCount uygulamasını çalıştıracak ve JVM Profiler'ı başlatacaktır. Parametreler hakkında daha fazla bilgi için lütfen Uber JVM Profiler'ın GitHub README sayfasını kontrol edin.

    Kodu kopyala

    spark-submit --master spark: //192.168.1.6: 7077 --conf "spark.driver.extraJavaOptions = -javaagent: /opt/profiler/jvm-profiler-0.0.9.jar=reporter=com.uber.profiling .reporters.InfluxDBOutputReporter, metricInterval = 5000, sampleInterval = 5000, ioProfiling = true "--conf" spark.executor.extraJavaOptions = -javaagent: /opt/profiler/jvm-profiler-0.0.9.jar=reporter=com.uber .profiling.reporters.InfluxDBOutputReporter, tag = influxdb, configProvider = com.uber.profiling.YamlConfigProvider, configFile = / opt / profiler / influxdb.yaml, metricInterval = 5000, sampleInterval = 5000, ioProfiling. = true "--class orgap .spark.examples.streaming.JavaSqlNetworkWordCount ../examples/jars/spark-examples_2.11-2.3.1.jar localhost 9999

    Alternatif olarak, uygulamayı çalıştırmak için yaml dosyasını kullanabiliriz. Komutta "configProvider" ve "configFile" parametrelerini aşağıda gösterildiği gibi geçirin.

    Kodu kopyala

    spark-submit --master spark: //192.168.1.6: 7077 --conf "spark.driver.extraJavaOptions = -javaagent: /opt/profiler/jvm-profiler-0.0.9.jar=reporter=com.uber.profiling .reporters.InfluxDBOutputReporter, configProvider = com.uber.profiling.YamlConfigProvider, configFile = / opt / profiler / influxdb.yaml, metricInterval = 5000, sampleInterval = 5000, ioProfiling = true "--conf "J.executor.extra : /opt/profiler/jvm-profiler-0.0.9.jar=reporter=com.uber.profiling.reporters.InfluxDBOutputReporter,tag=influxdb,configProvider=com.uber.profiling.YamlConfigProvider,configFile=/opt/profiler .yaml, metricInterval = 5000, sampleInterval = 5000, ioProfiling = true "--class org.apache.spark.examples.streaming.JavaSqlNetworkWordCount ../examples/jars/spark-examples_2.11-2.3.1.jar localhost 9999

    "Giriş" terminaline gidin ve aşağıdaki komutları uygulayın.

    ölçümleri kullan

    ölçüleri göster

    Aşağıda gösterildiği gibi, "metrikler" veritabanında "Ölçümler" adını alacağız.

    CpuAndMemory

    IO

    Işlem bilgisi

    Yığın izleme

    CpuAndMemory metriğinden tek bir kayıt almak için aşağıdaki komutu kullanın.

    CpuAndMemory sınırından * seçin 1

    Aşağıda örnek bir gösterge panosu verilmiştir.

    Şekil 2. Spark ölçümleri için Grafana kontrol paneli örneği

    lehte ve aleyhte olanlar

    Bu makalede tartıştığımız performans izleme sistemi, sistem ve uygulama ölçümlerini toplamak ve bunları InfluxDB zaman serisi veritabanında depolamak için Uber JVM Profiler'ı kullanır. Zaman serisi veritabanları, veri tutma stratejileri, sürekli sorgulama, esnek zaman toplama ve milyonlarca kaydın gerçek zamanlı işleme ve toplu işlemesini sağlar. Bu zaman serisi verileri, geçmişte sistemdeki değişiklikleri, sistemin mevcut davranışını analiz etmemize ve sistemin gelecekte nasıl değişeceğini tahmin etmemize yardımcı olur. Göstergeleri ilişkilendirerek arıza modlarını belirleyebiliriz. Farklı gösterge türlerine kolayca erişmemize yardımcı olacak bir gösterge tablosu oluşturmak için Grafana'yı kullandık. DevOps ekipleri, sistem davranışını anlamak ve verilerdeki sıcak noktaları belirlemek için farklı ölçümleri ilişkilendirmek için bu grafikleri ve çizelgeleri kullanabilir. Bu, uyumluluğun korunmasına ve uygulama SLA'larının elde edilmesine yardımcı olur. Genel olarak, performans izleme sistemi, sistemin sürekli izlenmesine yardımcı olur.

    Bu performans izleme sistemi, aracı tabanlı Profiler ile sınırlıdır. Aracı tabanlı Profiler belirli miktarda bilgi işlem kaynağı tüketir. Bazen büyük dağıtılmış sistemler için zor olabilecek sorun giderme ve yama gerekebilir. Temsilciyi üretim sistemine kurmadan önce biraz araştırma yapmanız gerekebilir. Performans izleme sisteminin güvenliğini, ölçeklenebilirliğini ve kullanılabilirliğini de göz önünde bulundurmalıyız. Uygulamaları ve sistemleri doğru bir şekilde tasarlayarak ve ayarlayarak çoğu sorun çözülebilir. Üretim sistemine aracılar kurmanıza izin verilmiyorsa, aracısız bir sistem kullanmayı düşünebilirsiniz, ancak bunun daha az ayrıntılı gösterge ve ağ yükü ek yükü gibi kendi sınırlamaları da vardır.

    sonuç olarak

    Karmaşık Spark uygulamaları için, üretim ortamındaki sorunları belirlemek, hata ayıklamak ve çözmek kolay değildir.Bu sorunları çözmemize yardımcı olacak etkili bir performans izleme sistemine ihtiyacımız var. Uber JVM Profiler iyi bir açık kaynak aracıdır, metrikleri yayınlamak için bir Reporter eklemek üzere genişletebiliriz. Farklı Profilciler tarafından toplanan Spark uygulama performans ölçümleri InfluxDB'de depolanabilir. Bu makalede tartıştığımız "InfluxDBOutputReporter", Spark sürücüsünün ve yürütücülerinin ölçümlerini HTTP API aracılığıyla InfluxDB'ye yazar. Grafana, HTTP API aracılığıyla ölçümleri sorgulayabilen InfluxDB için bir eklenti sağlar. Bu göstergeler için grafikler içeren panolar oluşturabilir ve düzenli aralıklarla otomatik olarak yenileyebiliriz. "InfluxDBOutputReporter" kodu burada sağlanır ve Spark-InfluxDB-Grafana.json dosyası burada sağlanır.

    referans

    Uber JVM Profiler-https: //eng.uber.com/jvm-profiler/

    InfluxDB-https: //docs.influxdata.com/influxdb/v1.6/

    Grafana-http: //docs.grafana.org/

    Yazar hakkında

    Amit Baghel, Java ekosistemini çevreleyen kurumsal uygulamaların ve ürünlerin tasarımı ve geliştirilmesinde 17 yıldan fazla deneyime sahip bir yazılım mimarıdır. Şu anda IoT, bulut bilişim, büyük veri çözümleri, mikro hizmetler, DevOps ve sürekli entegrasyon ve teslimat üzerine odaklanmaktadır. Baghel ile baghel_amit@yahoo.com adresine e-posta göndererek iletişime geçebilirsiniz.

    Orijinal İngilizce metni görüntüleyin:

    https://www.infoq.com/articles/spark-application-monitoring-influxdb-grafana

    Büyük verinin tanıdık olduğunu söylemek neden yanlış anlaşılıyor?
    önceki
    Ünlü güney rap grubu 8Ball ve MJG, 90'larda yeni bir albüm çıkardı.
    Sonraki
    Zhiyun Weebill Lab mikro-tek sabitleyici raporu: sizi yenileyecek bir dengeleyici
    Bugün Amerikan draması "The Great Mrs. Maisel" hakkında konuşacağız.
    Çok kırılmayan akıllı bir çöp kutusu, artık çöp atmaktan nefret etmiyorsunuz ... | Yaşam tarzı
    Bu AWS gibi olmanı beklemiyordum
    Missy Elliott, şarkı yazarlığı şöhret listesine giren ilk kadın rap şarkıcısı oldu
    Switch'in yeni çalışması "Super Mario Odyssey" açıklandı Tesisatçı gerçek dünyaya geldi!
    Projektöre dokunabilen yavru küp, ev eğlencesini bozuyor mu yoksa yeni bir oyuncak mı?
    "Longmen Chuangjiang" Küresel İnovasyon ve Girişimcilik Yarışması Çin Finalleri Shenzhen'de yapıldı
    Her şey basitlik ve pratiklik etrafında dönüyor, bu, iç pazarda yeni piyasaya sürülen Nokia 3.1 Plus.
    Çin ve Amerika Birleşik Devletleri'nde çevrimdışı perakendede yeni genişleticiler ortaya çıktı, ancak ikisinin yolları oldukça farklı.
    Changde: 3.067 milyon yuan'lık "Bahar Şenliği Hediye Paketi" 2.000'den fazla muhtaç çalışana fayda sağladı
    "Color Jet 2" resmi olarak 2017 yazında satışa çıkarıldı
    To Top