Apache Spark nedir? Hadoop'u ezen büyük veri platformu

Apache Spark tanımlandı

Apache Spark, çok büyük veri kümelerinde işleme görevlerini hızlı bir şekilde gerçekleştirebilen ve aynı zamanda veri işleme görevlerini birden çok bilgisayara tek başına veya diğer dağıtılmış bilgi işlem araçlarıyla birlikte dağıtabilen bir veri işleme çerçevesidir. Bu iki nitelik, büyük veri depoları arasında hızla ilerlemek için muazzam bilgi işlem gücünün sıralanmasını gerektiren büyük veri ve makine öğrenimi dünyalarının anahtarıdır. Spark ayrıca, dağıtılmış bilgi işlem ve büyük veri işlemenin zorlu işlerinin çoğunu özetleyen kullanımı kolay bir API ile bu görevlerin programlama yüklerinden bazılarını geliştiricilerin omuzlarından alıyor.

2009'da UC Berkeley'deki AMPLab'daki mütevazı başlangıcından itibaren Apache Spark, dünyadaki en önemli büyük veri dağıtılmış işleme çerçevelerinden biri haline geldi. Spark, çeşitli şekillerde dağıtılabilir, Java, Scala, Python ve R programlama dilleri için yerel bağlantılar sağlar ve SQL, veri akışı, makine öğrenimi ve grafik işlemeyi destekler. Bankalar, telekomünikasyon şirketleri, oyun şirketleri, hükümetler ve Apple, Facebook, IBM ve Microsoft gibi tüm büyük teknoloji devleri tarafından kullanıldığını göreceksiniz.

Apache Spark mimarisi

Temel düzeyde, bir Apache Spark uygulaması iki ana bileşenden oluşur: kullanıcının kodunu, çalışan düğümler arasında dağıtılabilen birden çok göreve dönüştüren bir sürücü ve bu düğümlerde çalışan ve kendilerine atanan görevleri yürüten yürütücüler . İkisi arasında arabuluculuk yapmak için bir tür küme yöneticisi gereklidir.

Spark, kutunun dışında, kümenizdeki her makinede Apache Spark çerçevesi ve bir JVM gerektiren bağımsız bir küme modunda çalışabilir. Ancak, işçileri sizin için talep üzerine tahsis etmek için daha sağlam bir kaynak veya küme yönetim sisteminden yararlanmak isteyebilirsiniz. Kuruluşta bu, normalde Hadoop YARN üzerinde çalışmak anlamına gelir (Cloudera ve Hortonworks dağıtımları Spark işlerini bu şekilde çalıştırır), ancak Apache Spark ayrıca Apache Mesos, Kubernetes ve Docker Swarm üzerinde de çalışabilir.

Yönetilen bir çözüm arıyorsanız, Apache Spark Amazon EMR, Google Cloud Dataproc ve Microsoft Azure HDInsight'ın bir parçası olarak bulunabilir. Apache Spark'ın kurucularını kullanan şirket olan Databricks, Apache Spark kümeleri, akış desteği, entegre web tabanlı dizüstü bilgisayar geliştirme ve optimize edilmiş bulut G / Ç performansı sunan kapsamlı bir yönetilen hizmet olan Databricks Unified Analytics Platformunu da sunmaktadır. standart bir Apache Spark dağıtımı.

Apache Spark, kullanıcının veri işleme komutlarını Directed Acyclic Graph veya DAG olarak oluşturur. DAG, Apache Spark'ın zamanlama katmanıdır; hangi görevlerin hangi düğümlerde ve hangi sırayla yürütüleceğini belirler.  

Spark ve Hadoop: Neden Apache Spark kullanmalı?

Apache Spark ile Apache Hadoop'un biraz yanıltıcı olduğunu belirtmekte fayda var. Spark'ın bugünlerde çoğu Hadoop dağıtımına dahil olduğunu göreceksiniz. Ancak iki büyük avantajı nedeniyle Spark, büyük verileri işlerken tercih edilen çerçeve haline geldi ve Hadoop'u öne çıkaran eski MapReduce paradigmasını geride bıraktı.

İlk avantaj hızdır. Spark'ın bellek içi veri motoru, belirli durumlarda MapReduce'tan yüz kata kadar daha hızlı görevleri gerçekleştirebileceği anlamına gelir, özellikle de aşamalar arasında diske durum yazımını gerektiren çok aşamalı işlerle karşılaştırıldığında. Temelde MapReduce, veri eşleme ve azaltmadan oluşan iki aşamalı bir yürütme grafiği oluştururken, Apache Spark'ın DAG'sinin daha verimli dağıtılabilen birden çok aşaması vardır. Verilerin tamamen bellekte tutulamadığı Apache Spark işleri bile MapReduce muadillerine göre yaklaşık 10 kat daha hızlı olma eğilimindedir.

İkinci avantaj, geliştirici dostu Spark API'sidir. Spark'ın hızlanması kadar önemli olduğu kadar, Spark API'nin kolaylığının daha da önemli olduğu iddia edilebilir.

Kıvılcım Çekirdeği

MapReduce ve diğer Apache Hadoop bileşenlerine kıyasla Apache Spark API, geliştiriciler için oldukça dostudur ve dağıtılmış işlem motorunun karmaşıklığının çoğunu basit yöntem çağrılarının arkasına gizler. Bunun kanonik örneği, bir belgedeki kelimeleri saymak için neredeyse 50 satırlık MapReduce kodunun nasıl Apache Spark'ın sadece birkaç satırına indirgenebileceğidir (burada Scala'da gösterilmiştir):

val textFile = sparkSession.sparkContext.textFile ("hdfs: /// tmp / kelimeler")

val sayısı = textFile.flatMap (line => line.split (""))

                      .map (kelime => (kelime, 1))

                      .reduceByKey (_ + _)

counts.saveAsTextFile ("hdfs: /// tmp / words_agg")

Python ve R gibi veri analizi için popüler dillerin yanı sıra daha kurumsal dostu Java ve Scala'ya bağlantılar sağlayan Apache Spark, uygulama geliştiricilerinden veri bilimcilerine kadar herkesin ölçeklenebilirliğini ve hızını erişilebilir bir şekilde kullanmasını sağlar.

Spark RDD

Apache Spark'ın kalbinde, bir bilgi işlem kümesine bölünebilen, değişmez bir nesne koleksiyonunu temsil eden bir programlama soyutlaması olan Esnek Dağıtılmış Veri Kümesi (RDD) kavramı yer alır. RDD'lerdeki işlemler, aynı zamanda küme genelinde bölünebilir ve paralel bir toplu işlemde yürütülebilir, bu da hızlı ve ölçeklenebilir paralel işlemeye yol açar.

RDD'ler basit metin dosyalarından, SQL veritabanlarından, NoSQL depolarından (Cassandra ve MongoDB gibi), Amazon S3 klasörlerinden ve çok daha fazlasından oluşturulabilir. Spark Core API'nin çoğu, bu RDD konsepti üzerine inşa edilmiştir, geleneksel haritayı etkinleştirir ve işlevselliği azaltır, ancak aynı zamanda veri kümelerini birleştirme, filtreleme, örnekleme ve toplama için yerleşik destek sağlar.

Spark, bir Spark uygulamasını görevlere ayıran ve işi yapan birçok yürütme işlemi arasında dağıtan bir sürücü çekirdek sürecini birleştirerek dağıtılmış bir şekilde çalışır. Bu yürütücüler, uygulamanın ihtiyaçları için gerektiği gibi ölçeklenebilir ve küçültülebilir.

Spark SQL

Başlangıçta Shark olarak bilinen Spark SQL, Apache Spark projesi için gittikçe daha önemli hale geldi. Günümüz geliştiricileri tarafından uygulama oluştururken en yaygın olarak kullanılan arayüz muhtemelen budur. Spark SQL, R ve Python'dan (Pandalar'da) ödünç alınan bir veri çerçevesi yaklaşımı kullanarak yapılandırılmış verilerin işlenmesine odaklanır. Ancak adından da anlaşılacağı gibi, Spark SQL aynı zamanda verileri sorgulamak için SQL2003 uyumlu bir arayüz sağlayarak Apache Spark'ın gücünü geliştiricilerin yanı sıra analistlere de getiriyor.

Standart SQL desteğinin yanı sıra, Spark SQL, tümü kutudan çıktığı gibi desteklenen JSON, HDFS, Apache Hive, JDBC, Apache ORC ve Apache Parquet dahil olmak üzere diğer veri depolarından okumak ve bunlara yazmak için standart bir arabirim sağlar. Diğer popüler mağazalar - Apache Cassandra, MongoDB, Apache HBase ve diğerleri - Spark Packages ekosisteminden ayrı konektörler çekilerek kullanılabilir.

Bir veri çerçevesinden bazı sütunların seçilmesi bu satır kadar basittir:

şehirlerDF.select ("ad", "pop")

SQL arayüzünü kullanarak, veri çerçevesini geçici bir tablo olarak kaydederiz, ardından buna karşı SQL sorguları düzenleyebiliriz:

CitiesDF.createOrReplaceTempView ("şehirler")

spark.sql ("SEÇİN ad, şehirlerden pop")

Apache Spark, perde arkasında, küme genelinde gerekli hesaplamaları gerçekleştirecek veri konumu ve hesaplama için verimli bir sorgu planı oluşturmak amacıyla verileri ve sorguları inceleyen Catalyst adlı bir sorgu iyileştirici kullanır. Apache Spark 2.x çağında, veri çerçeveleri ve veri kümelerinin Spark SQL arabirimi (esasen, derleme zamanında doğruluk açısından kontrol edilebilen ve çalışma zamanında daha fazla bellek ve hesaplama optimizasyonlarından yararlanabilen tiplenmiş bir veri çerçevesi) geliştirme için önerilen yaklaşımdır . RDD arayüzü hala mevcuttur, ancak yalnızca ihtiyaçlarınız Spark SQL paradigması içinde ele alınamıyorsa önerilir.

Spark 2.4, dizileri ve diğer üst düzey veri türlerini doğrudan işlemek için bir dizi yerleşik üst düzey işlev sundu.

Spark MLlib

Apache Spark ayrıca, büyük ölçekte verilere makine öğrenimi ve grafik analizi teknikleri uygulamak için kitaplıkları bir araya getirir. Spark MLlib, herhangi bir yapılandırılmış veri kümesinde özellik çıkarma, seçim ve dönüşümlerin kolay uygulanmasına olanak tanıyan makine öğrenimi ardışık düzenleri oluşturmak için bir çerçeve içerir. MLlib, k-ortalama kümeleme ve özel boru hatlarına kolaylıkla girip çıkabilen rastgele ormanlar gibi dağıtılmış kümeleme ve sınıflandırma algoritmaları uygulamalarıyla birlikte gelir. Modeller, Apache Spark'ta R veya Python kullanılarak veri bilimcileri tarafından eğitilebilir, MLlib kullanılarak kaydedilebilir ve ardından üretim kullanımı için Java tabanlı veya Scala tabanlı bir ardışık düzene aktarılabilir.

Spark MLlib, sınıflandırma, regresyon, kümeleme ve filtreleme dahil olmak üzere temel makine öğrenimini kapsarken, derin sinir ağlarını modelleme ve eğitme olanakları içermediğini unutmayın (ayrıntılar için Spark MLlib incelemesine bakın). Ancak Derin Öğrenme Boru Hatları çalışmaların içinde.

Spark GraphX

Spark GraphX, Google'ın PageRank uygulaması dahil, grafik yapılarını işlemek için bir dizi dağıtılmış algoritma ile birlikte gelir. Bu algoritmalar, verileri modellemek için Spark Core'un RDD yaklaşımını kullanır; GraphFrames paketi, grafik sorguları için Catalyst optimizer'dan yararlanma dahil olmak üzere veri çerçeveleri üzerinde grafik işlemleri yapmanızı sağlar.

Kıvılcım Akışı

Spark Streaming, Apache Spark'a gerçek zamanlı veya neredeyse gerçek zamanlı işleme gerektiren ortamlarda çekiş kazanmasına yardımcı olan erken bir eklentiydi. Önceden, Apache Hadoop dünyasında toplu iş ve akış işleme ayrı şeylerdi. Toplu işleme ihtiyaçlarınız için MapReduce kodu yazarsınız ve gerçek zamanlı akış gereksinimleriniz için Apache Storm gibi bir şey kullanırsınız. Bu açıkça, tamamen farklı çerçevelere dayalı olmasına, farklı kaynaklar gerektirmesine ve bunları çalıştırmak için farklı operasyonel kaygılara sahip olmasına rağmen uygulama alanı için senkronize tutulması gereken farklı kod tabanlarına yol açar.

Spark Streaming, akışı kesintisiz bir dizi mikro partiye bölerek Apache Spark toplu işleme konseptini akışa genişletti ve bunlar daha sonra Apache Spark API kullanılarak işlenebilir. Bu şekilde, toplu iş ve akış işlemlerinde kod (çoğunlukla) aynı kodu paylaşarak aynı çerçeve üzerinde çalışabilir ve böylece hem geliştirici hem de operatör ek yükünü azaltır. Herkes kazanır.

Spark Streaming yaklaşımının bir eleştirisi, gelen verilere düşük gecikmeli bir yanıtın gerekli olduğu senaryolarda mikro yığınlamanın Apache Storm, Apache Flink ve Apache Apex gibi akışa uygun diğer çerçevelerin performansıyla eşleşemeyebileceğidir. bunların tümü mikro yığınlar yerine saf bir akış yöntemi kullanır.

Yapılandırılmış Akış

Yapılandırılmış Akış (Spark 2.x'e eklenmiştir), Spark SQL'in Spark Core API'lerine ne olduğu Spark Streaming içindir: Daha yüksek düzeyde bir API ve yazma uygulamaları için daha kolay soyutlama. Yapı Akışı durumunda, daha yüksek seviyeli API esasen geliştiricilerin sonsuz akış veri çerçevesi ve veri kümeleri oluşturmasına izin verir. Ayrıca, özellikle olay zamanı toplamaları ve mesajların geç teslimatı ile ilgili olarak, kullanıcıların önceki çerçevede mücadele ettiği bazı çok gerçek sorunlu noktaları da çözer. Yapılandırılmış akışlardaki tüm sorgular, Catalyst sorgu iyileştiricisinden geçer ve hatta kullanıcıların canlı akış verilerine karşı SQL sorguları gerçekleştirmesine olanak tanıyan etkileşimli bir şekilde çalıştırılabilir.

Yapılandırılmış Akış, başlangıçta Spark Streaming'in akış verilerini işleme mikro yığınlama şemasına dayanıyordu. Ancak Spark 2.3'te Apache Spark ekibi, Yapılandırılmış Akışa düşük gecikmeli Sürekli İşleme Modu ekleyerek 1 ms'ye kadar düşük gecikmelerle yanıtları işlemesine olanak tanıdı ki bu çok etkileyici. Spark 2.4 itibariyle, Sürekli İşleme hala deneysel olarak kabul edilmektedir. Yapılandırılmış Akış, Spark SQL motorunun üzerine kurulurken, Sürekli Akış yalnızca sınırlı bir sorgu kümesini destekler.

Yapılandırılmış Akış, platformla akış uygulamalarının geleceğidir, bu nedenle yeni bir akış uygulaması oluşturuyorsanız Yapılandırılmış Akış'ı kullanmalısınız. Eski Spark Streaming API'leri desteklenmeye devam edecek, ancak proje, yeni yöntem akış kodunun yazılmasını ve sürdürülmesini çok daha katlanılabilir hale getirdiğinden Yapılandırılmış Akışa geçiş yapılmasını öneriyor.

Derin Öğrenme Ardışık Düzenleri

Apache Spark, Derin Öğrenme Ardışık Düzenleri aracılığıyla derin öğrenmeyi destekler. MLlib'in mevcut ardışık düzen yapısını kullanarak, daha düşük seviyeli derin öğrenme kitaplıklarını çağırabilir ve yalnızca birkaç satır kodda sınıflandırıcılar oluşturabilir, ayrıca gelen verilere özel TensorFlow grafikleri veya Keras modelleri uygulayabilirsiniz. Bu grafikler ve modeller, özel Spark SQL UDF'leri (kullanıcı tanımlı işlevler) olarak bile kaydedilebilir, böylece derin öğrenme modelleri, SQL ifadelerinin bir parçası olarak verilere uygulanabilir.

Apache Spark eğitimleri

Dalmaya ve Apache Spark öğrenmeye hazır mısınız? Evan Heitman'ın Python'da Apache Spark'a Bir Neanderthal's Guide to Apache Spark'ın nispeten basit terimlerle nasıl çalıştığının temellerini ortaya koymakla kalmayıp, aynı zamanda çerçeveyi kullanan basit bir Python uygulaması yazma sürecinde size rehberlik eden Python'u şiddetle tavsiye ediyoruz. . Makale, veri biliminin büyük veri ve makine öğreniminin giderek daha kritik hale geldiği bir dünya olduğu için mantıklı olan bir veri bilimcisinin bakış açısından yazılmıştır.

Platformun neler yapabildiğini ve nasıl yaptığını anlamanız için bazı Apache Spark örnekleri arıyorsanız, Spark By {Örnekler} 'e bakın. Burada Spark programlamanın yapı taşlarını oluşturan temel görevlerin birçoğu için bol miktarda örnek kod vardır, böylece Apache Spark'ın yapıldığı daha büyük görevleri oluşturan bileşenleri görebilirsiniz.

Daha derine inmeniz mi gerekiyor? DZone, pek çok Apache Spark konusuyla ilgili bir dizi yararlı öğreticiden oluşan The Complete Apache Spark Collection olarak mütevazı bir şekilde bahsettiği şeye sahiptir. İyi öğrenmeler!