Apache Spark Serisi – 1

Teknolojinin gelişimi ile birlikte, her geçen gün, daha fazla verinin üretimi ve depolanabilmesi sağlanmaktadır. Verinin anlamlandırılıp, yorumlanması noktasında verinin hacminin bu hızlı artışı karşımıza problem olarak çıkabilmektedir. Bu noktada, günümüzde ismi oldukça duyulmaya başlayan Apache Spark karşımıza çıkmaktadır.

Apache Spark Nedir?

Bugün spark hakkında kısa bir araştırma yaptığımızda karşımıza Spark’ın büyük ölçekli dağıtılmış veri işleme için birleşik bir analiz motoru (unified analytics engine) olduğu bilgisi çıkmaktadır. Burada birleşik analizden kasıt; veri işleme adımlarını yapay zeka teknolojileri ile birleştirerek bir çözüm sunuyor olmasıdır. Spark, bir makine kümesi üzerinde işbirliği içerisinde çalışan bileşenleri ile veri işleme görevlerini birden çok bilgisayara tek başına dağıtabilen veya diğer dağıtılmış bilgi işlem araçlarıyla birlikte dağıtabilen bir veri işleme ve dağıtık hesaplama çerçevesidir. Şimdi Spark’ın özelliklerini madde madde inceleyelim.

  • İlk olarak 2009 yılında California Üniversitesi, Berkeley’nin AMPLab’ında geliştirilen Spark kod tabanı, daha sonra Apache Software Foundation’a bağışlanmıştır ve o zamandan beri de sürdürülmektedir. UC Berkeley’deki Spark araştırma projesini başlatan ekip, 2013’te Databricks’i kurmuştur.
  • Apache Spark açık kaynak kodludur. Büyük veride hızla en büyük açık kaynak topluluğu haline gelmektedir.
  • Scala dili ile geliştirilmiştir.
  • Ön önemli özelliklerinden biri; ara hesaplamalar için in-memory( bellek içi) depolama sağladığı için Hadoop MapReduce’dan daha hızlı olmasıdır. Tekrarlı hesaplamalarda(iterative computations) in-memory avantajı sayesinde yüksek performans sağlar.
  • Çeşitli veri kaynaklarına erişebilmektedir. Spark StandAlone, Kubernetes, Hadoop Yarn ve Apache Mesos gibi resource/cluster manager’lar üzerinde çalışmaktadır. Spark StandAlone, varsayılan olarak gelen cluster’dır.
  • Farklı kaynaklardan gelen verilerin işlenmesi, görselleştirilmesi, analiz edilmesi gibi bir çok adım Spark ile gerçekleştirilebilmektedir. Makine öğrenmesi ve ileri analitik teknikleri kullanılabilmektedir. Spark, düşük gecikme süresi ve yüksek güvenilirlik ile gerçek zamanlı veri işleme sağlamaktadır.
  • Spark, çalıştığı sırada ortaya çıkan bir hatayı telafi edebilmektedir. Sorunla karşılaşılması durumunda Spark’ın tekrardan çalıştırılmasına gerek yoktur.
  • Gerçek zamanlı veya anlık verilerden hızlı aksiyon alınmasının önemli olduğu bankalar, satış sistemleri gibi alanlarda sıkça kullanılmaktadır. Netflix, Yahoo, eBay, Nasa, Apple, IBM gibi kuruluşlar tarafından kullanılmaktadır.
  • Spark, kısa adıyla RDD denilen esnek dağıtılmış veri kümesi (Resilient Distributed Dataset) ve DataFrame’ ler ile üst düzey yapılandırılmış veri soyutlaması sağlamasıyla, kullanım kolaylığı sağlamaktadır. Yönlü Düz Ağaçlar(DAG=Directed Acyclic Graph) adı verilen bileşen ise RDD bileşenini zamanlayarak düzene sokmamıza yarar. Bu yapılar ile bir dizi dönüşümler ve aksiyonların alındığı operasyonlar gerçekleştirilebilmektedir. Basit bir programlama modeli ile büyük veri uygulamaları geliştirilebilmektedir. Spark, paralel uygulamalar oluşturmayı kolaylaştıran 80’den fazla üst düzey operatör sunmaktadır.
  • Batch ve akış verilerinde, son teknoloji ürünü bir DAG planlayıcısı, sorgu optimizasyonu ve fiziksel uygulama motoru kullanarak yüksek performanslı çalışır.
  • Spark, depolama yerine hızlı, paralel hesaplama motoruna odaklanmaktadır. Hem depolama hem de hesaplama içeren Apache Hadoop aksine, Spark bu iki kavramı ayırmaktadır. Bu, sayısız kaynakla (Apache Hadoop, Apache Cassandra, Apache HBase, MongoDB, Apache Hive, RDBMS’ler ve daha fazlası) depolanan verileri okumak ve veriyi bellekte(memory) işlemek için Spark’ı kullanabileceğiniz anlamına gelmektedir.
  • Spark, çok çeşitli programlama dillerini desteklemektedir. Bunlar; Scala, Java, Python, SQL ve R olarak sıralanabilir. Birleştirilmiş API kütüphaneler içerir. Bu kütüphaneler sayesinde tüm iş yükleri tek bir motor altında birleştirilmektedir.(unified processing engine) Bu kitaplıklar aynı uygulamada sorunsuz bir şekilde birleştirilebilir. Aşağıda kısa bir özeti verilmiş olan kitaplıklar hakkında detaylı bilgiyi Spark bileşenleri kısmında bulabilirsiniz.
  1. Makine öğrenimi için -> MLlib
  2. Etkileşimli (interactive) sorgular için -> Spark SQL
  3. Gerçek zamanlı verilerle etkileşim için akış işleme için -> Structured Streaming
  4. Grafik işleme için -> GraphX
  • Spark geliştiricileri topluluğu , büyüyen ekosistemin bir parçası olarak üçüncü taraf Spark paketlerinin bir listesini tutar (bkz.Şekil 1) Bu zengin paket ekosistemi, çeşitli dış veri kaynakları, performans monitörleri ve daha fazlası için Spark bağlayıcıları içerir.
Apache Spark’s ecosystem of connectors
Şekil 1- Apache Spark bağlayıcıları ekosistemi

Spark Bileşenleri

Apache Spark bileşenleri ve API yığını
Şekil 2 – Apache Spark bileşenleri ve API yığını

Spark SQL

Bu modül, RDBMS tablolarında ve yapılandırılmış dosya formatlarında (CSV, text, JSON, Avro, ORC, Parquet vb.)depolanan verileri okuyabilmektedir ve kalıcı yada geçici olarak tablolar oluşturulabilmektedir. Ayrıca Spark’ın yapılandırılmış API’leri Java, Python, Scala yada R kullanarak, Spark DataFrame’i SQL benzeri sorgular ile okuyabilmeketedir.

Spark MLlib

Spark, MLlib adı verilen yaygın makine öğrenimi (ML) algoritmalarını içeren bir kitaplıkla birlikte gelmektedir. MLlib, modeller oluşturmak için üst düzey DataFrame tabanlı API’lerin üzerine inşa edilmiş birçok popüler makine öğrenimi algoritması sağlar.

API’ler ETL süreçlerinin gerçekleştirilmesini (extract, transform, load), pipeline(boru hattı) oluşturulmasını, tüm dağıtım(deployment) süreçlerini gerçekleştirmesini sağlar. Ek araçlar, ortak doğrusal cebir işlemlerinin ve istatistiklerin kullanımını içerir. MLlib, genel bir gradyan iniş optimizasyonu dahil olmak üzere diğer düşük seviyeli ML temellerini içerir.

Spark Streaming(Structured Streaming)

Hem statik verilerin hem de Apache Kafka ve diğer akış kaynaklarını gibi motorlardan gelen veri akışlarının bir araya getirilmesi ve gerçek zamanlı olarak aksiyon alınabilmesi sağlanmaktadır.

GraphX

GraphX, grafikleri (ör. Sosyal ağ grafikleri, rotalar ve bağlantı noktaları veya ağ topolojisi grafikleri) işlemek ve grafik paralel hesaplamalar yapmak için bir kitaplıktır. Mevcut algoritmalar arasında PageRank, Connected Components ve Triangle Counting bulunur.

Hadoop ve Apache Spark Arasındaki Farklar ve Benzerlikler

Apache Spark ve Apache Hadoop teknolojilerinin her ikisi de büyük veri framework’leridir. Çeşitli konularda birbirlerine üstünlükleri olduğu gibi amaca göre tercih edilmesi en uygunudur. Her yeni teknolojinin ihtiyaçtan doğduğunu da unutmamak gerekir.

  • Hadoop, büyük verileri paralel biçimde hem işler hem de kaydeder. Verilerin saklanması adına HDFS, verileri işlemek için MapReduce algoritmasını kullanır. Spark’ın kendine ait bir dosya yönetim sistemi ve veri depolama aracı bulunmaz. Bunun getirisi olarak, farklı bir bulut tabanlı veri platformuyla yada HDFS ile entegre edilmesi gerekmektedir.
  • Birbirlerinden en önemli farkları Spark’ın hızlı olmasını da sağlayan Hadoop MapReduce yapısı sayesinde verilerin diskten okuyup diske yazarken, Spark’ın verileri in-memory(RAM) olarak işlemektedir.Belleğe sığmayan veri olduğunda diskte kullanmaktadır. Bu özelliğinden dolayı, Spark’ın Hadoop’tan 100 kat daha hızlı olduğu iddia edilmektedir. Veri kümesinin RAM’den büyük olması durumda Hadoop MapReduce, Spark’a kıyasla daha hızlı olabilir.
  • Apache Spark, Hadoop’tan farklarından biri de Spark Streaming sayesinde anlık veri işleme imkanı sunmasıdır.
  • Birden çok veri kümesinin birleştirilmesi görevlerinde join işlemleri Spark ile daha hızlı yapılmaktadır.
  • Kimlik doğrulama sistemi olan Shared Secret ile Spark, her iki tarafın da gizliliği korumaktadır.
  • Makine öğrenmesi algoritmalarının dağıtık uygulanması konusunda Spark daha iyi performans göstermektedir.

Serinin ilk yazısının sonuna geldik. Olası sorularınız ve ilgilendiğiniz konuları benimle paylaşırsanız çok sevinirim.

Okuduğunuz için teşekkürler…

Kaynakça:

1- https://spark.apache.org/

2- https://en.wikipedia.org/spark

3- https://databricks.com/spark/about

Leave a Reply

Your email address will not be published. Required fields are marked *