Apache Spark’a Giriş

Hayriye Anıl
6 min readSep 19, 2021

--

Apache Spark, büyük ölçekli veri işleme için kullanılan açık kaynaklı dağıtılmış bir işlem sistemidir. Her boyuttaki verilere karşı hızlı sorgular için bellek içi önbelleğe alma ve optimize edilmiş sorgu yürütme kullanır. Basitçe söylemek gerekirse, Spark, büyük ölçekli veri işleme için hızlı ve genel motordur.

  • Scala, Java, Python, R veya SQL gibi pek çok dil API’sine sahip olduğu için geliştirmesi ve kullanması kolaydır.
  • Kendi ekosistemine sahiptir.
  • Apache Spark Scala’da yazılmıştır.
  • Spark, bir kümede, şirket içinde veya bir bulutta olduğu gibi yerel olarak da çalışır.
  • Hadoop YARN, Apache Mesos üzerinde, bağımsız olarak veya Amazon EC2 veya IBM Bluemix gibi Cloud’da çalışır.
  • Büyük, dağıtılmış kümeler üzerinde çalışmak üzere tasarlanmıştır, aynı zamanda tek makine modunda da kullanılabilir.
  • Spark, 2009 yılında UC Berkeley’in RAD Laboratuvarında bir araştırma projesi olarak başlamıştır. Bu daha sonra AMP Laboratuvarı oldu.
  • Laboratuvardaki araştırmacılar daha önce Hadoop MapReduce üzerinde çalışıyorlardı, ama MapReduce’un yinelemeli ve etkileşimli bilgi işlem işleri için yetersiz olduğunu biliyorlardı. Spark, en başından beri etkileşimli sorgular ve yinelemeli algoritmalar için hızlı olacak şekilde tasarlandı.
  • Mart 2010'da açık kaynaklıydı ve 2011'den sonra Mllib, Spark Streaming ve GraphX ​​gibi başka kütüphaneler eklendi.
  • 2013 itibariyle, Spark oldukça yaygın bir şekilde kullanılıyordu ve Berkeley’in AMP (Algorithms Machines People) Laboratuvarı onu Apache Yazılım Vakfı’na bağışladı.
  • Orijinal AMP Lab ekibinden bir çift, Databricks adında bir şirket kurdu. Apache Spark koduna katkıda bulunan birkaç şirketten biridir.
  • Databricks, Apache Spark’ı veri bilimi ile veri mühendisliğini birleştiren bir platform olarak sunar. Apache Spark’ın optimize edilmiş bir sürümünü sağlar, etkileşimli not defterleri sunar ve herhangi bir büyük kuruluşun ihtiyaç duyacağı tam kurumsal güvenliğe sahiptir. Databricks kullanarak diğer iş zekası araçlarına da bağlanılabilir ve ana katkıda bulunanlardan biri oldukları için Databricks geliştiricileri tarafından oluşturulan herhangi bir şey daha sonra Apache Spark’ın ana kod tabanına girer.
  • Databricks’te Baş Teknoloji uzmanı olan Zaharia ve Stoica gibi orijinal kodu yazan birkaç kişi hala Databricks’tedir.

Apache Spark Ekosistemi

Apache Spark Ekosistemi, Spark SQL ve veri çerçevelerinden, gerçek zamanlı veriler için akıştan, makine öğrenimi için M Llib’den ve ölçekte grafik yapılı verileri anlamanızı sağlayan GraphX’ten oluşur.

Spark Core API, görev zamanlaması, bellek yönetimi, hata kurtarma, depolama sistemleriyle etkileşim ve daha fazlası için bileşenler dahil olmak üzere Spark’ın temel işlevlerini içerir.

Spark SQL, SQL sorgularını kullanarak verileri etkileşimli olarak keşfetmeye olanak tanır.

- Spark SQL, SQL’in sorgularını düşük seviyeli API’ler tarafından desteklenen programlı veri manipülasyonlarıyla (Python, Java, Scala gibi) tek bir uygulama içinde kullanmaya ve SQL’i karmaşık analitikle birleştirmeye olanak tanır.

Spark Streaming

- Birçok uygulama, yalnızca toplu verileri değil, aynı zamanda gerçek zamanlı olarak yeni veri akışlarını da işleme ve analiz etme yeteneğine ihtiyaç duyar.

- Spark’ın üzerinde çalışan Spark Streaming, hem akış hem de geçmiş verilerde güçlü etkileşimli ve analitik uygulamalar sağlar.

MLlib

- En üstte Spark üzerine kurulu MLlib makine öğrenimi modeli, doğruluğu artırmak için birden çok yineleme gibi yüksek kaliteli algoritmalar sunan ölçeklenebilir bir makine öğrenimi kitaplığıdır.

- Hafızada çalışır. MapReduce’dan 100 kat daha hızlı olabilir.

GraphX

- Spark’ın üzerine kurulu Grafik Hesaplama Motoru, kullanıcıların etkileşimli olarak grafik yapısı verilerini ölçekte oluşturmasına, dönüştürmesine ve bu veriler hakkında akıl yürütmesine olanak tanır. Ortak algoritmalardan oluşan bir kitaplık ile birlikte gelir.

- Yeni bir grafik soyutlaması, her bir köşe ve kenara iliştirilmiş özelliklere sahip yönlendirilmiş çoklu grafik sunar.

- Sosyal ağlar gibi grafikleri görselleştirmek için kullanışlıdır.

Apache Spark Mimarisi

Driver, bir programın bir uygulamanın ana programını çağırır ve SparkContext’i oluşturur. Spark uygulaması hakkında bilgi tutar. Bir kullanıcı programına veya girdisine yanıt vermek gibi işler yapar ve Executor arasında işi dağıtır ve programlar. Spark Driver ve SparkContext, küme içindeki iş yürütmeyi toplu olarak izler. Spark Driver, çeşitli diğer işleri yönetmek için Cluster Manager ile birlikte çalışır.

Worker düğümündeki Executor, Driver tarafından atanan işi gerçekleştirir ve hesaplamanın durumunu Driver’a geri bildirir. Driver ve Executor sadece süreçlerdir. Bu, yerel düğümlerde çalışılıyorsa hepsinin tek bir makinede var olabileceği ve böylece yalnızca iş parçacığı oldukları ve bir Cluster üzerinde çalışıyorsa farklı makinelerde çalışabilecekleri anlamına gelir.

Cluster Manager Task Manager veya Resource Manager olarak iş görür. Spark uygulamaları Cluster Manager’a gönderildiğinde, işin tamamlanabilmesi için uygulamalara kaynak verirler. Ardından iş, daha fazla çalışan düğümlere dağıtılan birden çok küçük göreve bölünür. Spark, dağıtılmış bir sistemdir. Worker’lar paralel olarak çalışması gerektiğinde Spark’ın verileri chunks (parça) veya partition’a (bölüm) ayırması gerektiği anlamına gelir.

Partition, kümenizdeki bir makinede bulunan veri çerçevenizdeki satırların bir koleksiyonudur. Dolayısıyla, veri çerçeveleri bölümü, yürütme sırasında verilerin makine kümesi boyunca fiziksel olarak nasıl dağıtıldığıdır.

Veri Arayüzleri

Resilient Distributed Dataset (RDD):

- Spark’ta verilerle çalışmak için ilk kurulmuş ve en düşük seviyedeki API’dir.

- Spark’ı hızlı yapan özellik RDD’dir, tamamlanan süreçler arasında veri kökeni sağlayabilir.

- Her türden nesnenin değişmez dağıtılmış koleksiyonlarıdır. Adından da anlaşılacağı gibi, birden çok düğümde bulunan verilerin esnek (hataya dayanıklı) kayıtlarıdır.

- RDD veri nesneleriyle çalışmaya izin veren bir kapsayıcı görevi görür. Bu nesneler çeşitli türlerde olabilir ve kümedeki birçok makineye yayılabilir.

DataFrame:

- Python’da pandas ve R’deki DataFrames benzeridir.

- Spark’ta bir DataFrame, kural türündeki nesnelerin dağıtılmış bir koleksiyonudur.

- İlişkisel bir veri tabanındaki veya Excel belgesindeki tablolar gibi veri tablolarıdır.

- Yalnızca satır içermeleri dışında RDD’leri temel alırken, RDD’ler farklı türde nesneler içerir.

Dataset:

- Temelde RDD’ler ile DataFrame’lerin bir birleşimidir.

  • Verileri RDD gibi yazmaya ve aynı zamanda DataFrame gibi sorgulamaya izin verir.

Veri Kümesi İşlemleri

Spark’ın verilerle etkileşime girerken temelde yapılabilecek iki şey var.

Transformations, Spark’taki temel bir veri yapısıdır ve değiştirilemez. Veri çerçevesini değiştirmek için kullandığımız talimatlar transformations olarak bilinir. Bu, bir filtre işlemi veya yalnızca belirli bir sütundaki benzersiz değerlerin alındığı ayrı bir işlem olabilir. Spark, actions adı verilen bir şey gerçekleştirene kadar transformations üzerinde hareket etmez.

Veriler üzerinde bir işlem gerçekleştirildiğinde Spark, verileri hemen değiştirmeye çalışmaz. Bunun yerine, veriler üzerinde gerçekleştirilecek bir transformation planı oluşturur. Bu işi yapmak için son ana kadar beklemeye lazy evaluation denir. Spark’ın küme genelinde mümkün olduğunca verimli çalışmasına izin vererek kolaylaştırılmış bir plan oluşturmasına olanak tanır. Bu, büyük veri işleri için mantıklıdır.

Transformations, bir dizi talimat oluşturmayı sağlar. Bir action, Spark’a bu dönüşümlerin sonuçlarını hesaplamasını söyler ve üç türü vardır.

View Data = Konsoldaki verileri görüntülemeye izin veren eylemler.

Collect Data = Veri toplamaya izin veren eylemler.

Write Data = Çıktı veri kaynaklarına yazmaya izin veren eylemler.

PySpark

- Python’da Apache Spark için bir arayüzdür.

- Python API’lerini kullanarak Spark uygulamaları yazmayı sağlar.

- Verileri dağıtılmış bir ortamda etkileşimli olarak analiz etmek için PySpark kabuğunu oluşturur.

- Spark SQL, DataFrame, Streaming, MLlib (Machine Learning) ve Spark Core gibi Spark özelliklerinin çoğunu destekler.

Databricks

- Apache Spark’ı çalıştırmak için yönetilen bir platformdur.

- Kurulum ve operasyonun karmaşıklığını azaltmaya yardımcı olmak için Spark mimarisini ve bakımını üstlenir.

- Kullanıcıların Spark ile daha üretken olmalarına yardımcı olacak bir dizi özellik sunar.

- Veri bilimcileri veya veri analistleri gibi kullanıcı arayüzlerini tercih edenler ve veri iş yüklerini otomatikleştirmek isteyenler için geliştirilmiştir.

Databricks Terminolojisi

Workspaces: Tüm dosyalarınızın bulunduğu klasör

Notebook: Tüm farklı dil türlerini çalıştırabileceğiniz dijital kağıt parçası.

Libraries: Databricks platformunun işlevselliğini genişletmek için kullanabileceğimiz şeylerdir. Numpy gibi kütühaneleri alabilir ve bu işlevleri, Spark ve diğer işlevlerle birlikte kullanabilirsiniz.

Tables: Veritabanlarındaki tablolar gibidir. Spark ile tablolar oluşturabilir, bir sonraki işlemlerinizde bu tabloları çalıştırabilirsiniz.

Clusters: Spark işlerini yürütmek için gereklidir ve ücretsiz olarak altı gigabaytlık bir cluster kullanılabilir.

Jobs: Veri iş yüklerini planlamanın yoludur. Community Sürümü’nde mevcut değildir, tam Sürüm’de mevcuttur. Günlük veya gecelik görevlerin çoğunu otamatik hale getirmek için kullanılır.

community.cloud.databricks.com adresinden, ücretsiz hesap oluşturup giriş yaparak Databricks’in Community sürümünü kullanabilirsiniz.

Databricks notebook’da örnek veriseti okuma, DataFrame’e yükleme, veri görselleştirme gibi başlangıç işlemleri yaptığım notebook linki aşağıdadır.

REFERANSLAR

--

--