Azure Databricks, Optimize Bir Spark Engine
2022-02-04 Abdullah Kise
IDC'ye göre 2010 yılında dünya çapında üretilen veri miktarı 2 Zetabytes olarak ölçülmüş. 2022 yılında 79.5 Zetabytes, 2025 yılında ise 175 Zetabytes olacağı tahmin ediliyor.
Zetabyte devasa boyutlarda veri miktarını ifade ediyor. Buraya gelene kadar Terabyte, Petabyte ve Exabyte birimlerini geçiyoruz. 1000 Exabytes = 1 Zetabyte yapıyor yapıyor. Bir üniversitenin bu veri miktarını şöyle tarif ettiğini okumuştum: "Dünyadaki tüm plajlarda bulunan kum taneleri kadar bilgi". Sonrasında Yottabytes geliyor. O da şöyle tarif edilmiş: "7 bin insan bedenindeki toplam atom sayısı kadar bilgi".
Üniversitede iken ödevleri 1.44 mb olan disketlerde teslim ediyorduk. Yine de baya bir boşluk kalıyordu. Şimdilerde disketi sadece kaydet butonlarında bir ikon olarak görüyoruz. Gerçekten zaman çok hızlı geçiyor, değişim her an gerçekleşiyor ve artık teknoloji hayallerimizi zorluyor.
Son zamanlardaki teknolojik gelişmeler ağırlıklı olarak bulut bilişim, yapay zeka, izleme ve güvenlik üzerine. Veri insanın damarlarında akan kan gibi teknolojinin her noktasına can veriyor.
Verinin önemini, katma değerini ve rekabette nasıl bir avantaj sağlayabileceğini hemen hemen herkes bilir. Her ölçekteki şirket hatta birey ne kadar veri okur/yazar ise o kadar kendin emin adımlar atabilir. Ne olup bitti, hatta gelecekte neler olabileceği hakkında bir fikre sahip olabilir.
Dünyadaki bu veri miktarının büyük bölümünün (yaklaşık %80) cihazlar tarafından üretileceği tahmin ediliyor. Bu veriler elbette şirketler ve bireyler hakkında olacak.
Verinin önemini bilen herkes hızla veri depoluyor. Bu durum artık tek bir bilgisayar ile yönetilemeyecek kadar büyük verinin işlenmesini gerektirir hale geldi. Hizmet sunduğumuz firmaların bir kısmı tek bir bilgisayarın veri işleme kapasitesini zorlayacak noktalarda ve yeni çözümler arıyor. Bir kısmı ise bu konuda artık radikal adımlar atmaya başladı ve çoktan nimetlerinden faydalanabildiği bir noktaya geldi bile.
Eğer tek bir bilgisayar ile işleyemeyecek kadar büyük, farklı formatlarda ve hızlı (saniyede milyarlarca satır) veri ile çalışıyorsanız ki buna Big Data diyoruz; bu durumda karşımıza ilk çıkan çözüm yazılım ve donanım bakımından özel olarak optimize edilmiş MPP mimarisine sahip appliancelar oluyor. MPP mimarisi işlemcileri dağıtık mimariye benzer bir mantıkta paralel çalıştırıp son derece hızlı veri işleyebilse de şimdilerde bir çok firmanın hemencecik ulaşabildiği sınırlara sahip.
Sonraki adımda karşımıza NoSQL ve NewSQL veritabanları çıkıyor. Bu veritabanları hakkında konuşulacak çok şey var. Bazı önemli noktalara daha önceki makalelerde değindiğimiz için burada çok durmayıp hedefime odaklanacağım. Farklı tiplerde veri tutma konusunda özelleşmiş, bazıları InMemory çalışabilen ve genelde yatay ölçeklendirmeye müsait bu veritabanları veri depolamak ve işlemek için bir noktaya kadar yaralara merhem olsa da ihtiyaçların çok çeşitli olması artık bizi bir sonraki adıma geçmeye zorlayacaktır.
Bir sonraki adımda ise Hadoop ve Spark ekosistemleri ile karşılaşıyoruz. Yatay ölçeklendirmeye uygun bu ekosistemler içerisinde bir çok çözümü bir arada bulabiliyoruz. Spark daha az yeteneğe sahip olsa da InMemory çalışabilmesi ve MapReduce mantığındaki iyileştirmeler Hadoop'a göre 100 kat daha hızlı veri işlemesini sağlıyor. Hadoop'tan sonra çıkması ve yeteneklerinin kısıtlı olmasına rağmen bir çok firma tarafından ilk Big Data ekosistemi olarak devreye alınıyor.
Spark üzerinde Spark SQL, Spark Streaming, GraphX, Spark ML bileşenlerini görüyoruz. Bu bileşenlere biraz daha yakından bakalım.
Spark Core: RDD, DataFrame, DataSet yapıları ile çalışma imkanı verir. Python, R, Scala, Java, SQL, ve dağıtıma bağlı olarak .NET dillerini destekler.
Spark SQL: SQL dili ve/ya diğer diller yardımıyla yapısal olan veya yapısal olmayan verilerle çalışma ve istenirse bir tür veri ambarı inşa etme imkanı verir.
Spark Streaming: Saniyede milyarlarca işlem üreten veri kaynaklarından gelen verileri micro batchler halinde yani küçük tablolarlar diyebileceğimiz bir biçimde yakalama ve işleme imkanı verir. Son versiyonda Spark SQL bileşeni altında karşımıza çıkan Structured Streaming özelliği sonsuz tablo halinde akan veriyi işleme imkanı veriyor ve işleri biraz daha kolaylaştırıyor. Spark Streaming ile ilişkisel veritabanlarının ulaşamayacağı bir veri işleme kapasitesi sunuyoruz.
Spark ML/MLLib: Bu bileşen Makine Öğrenimi konusunda çözümler sunar. Spark tasarımı neticesinde iteratif konularda inanılmaz hızlar sunuyor. Hadoop'un bir Makine Öğrenimi bileşeni olan Apache Mahout'a göre 9 kat daha hızlı.
GraphX: Graph mantığında veri depolayan bir tür NoSQL veritabanıdır.
Spark ile yapabildiklerimizden bazıları şöyle:
- Yığın halindeki verileri işleyebiliriz. (Batch Processing)
- Yapısal verileri depolayıp analiz edebiliriz. (Structured Data Analysis)
- Makine Öğrenimi çalışmaları yürütebiliriz. (Machine Learning Analysis)
- Gerçek zamanlı akan veri analizi yapabiliriz. (Real-Tme Streaming Data Analysis)
Spark ortamına kavuşmanın bazı yöntemleri şöyle:
- Apache sitesinden ücretsiz indirmek ve yerel kaynaklara kurmak (Windows, Linux vs. deskteler)
- Hortonworks, Cloudera gibi firmaların dağıtımlarını kurmak
- Büyün bunları Azure üzerindeki sanal makinelerde yapmak
- Azure HDInsight ile hazır imageları aktif etmek ve kullanıcı dostu ara yüzlerle çalışmak
- Azure Synapse üzerinde Spark Pool ile çalışmak.
- Azure Databricks ile çalışmak.
Her yöntemin kendine göre avanta ve dezavantajları var. Bu yazımızda özelilkle Azure Databricks üzerinde durmak istiyorum.
Databricks firması Spark gelişimine en çok katkıda bulunan bir firmadır. Kendisi açık kaynak Spark Engineını optimize etti ve hem kendi hem de farklı bulut sağlayıcıları üzerinden bu optimize Spark Engineı kullanıma sundu.
Azure üzerinde Azure Databricks ifadesiyle bulup aktif edebileceğiniz bu hizmet Azure hizmetleri ile son derece uyumlu çalışıyor. Güvenlik için Azure Active Directory, Diskler için Azure Data Lake Storage Gen 2 kullanıyor. IoT Hub, Event Hub, Azure Data Factory, Azure Machine Learning, Cosmos DB, Power BI, Azure DevOps ve daha bir çok hizmet ile kolayca haberleşebiliyor.
Azure Databricksi portal.azure.com üzerinden aratıp kolayca bulabilirsiniz. Tüm Spark çalışmalarınız Workspace olarark isimlendirilen bir ortamda toplanıyor. Dolayısıyla hizmeti aktif etmek için bölgeyi, Workspace adını ve fiyatlandırma katmanını vermek yeterli olur.
Fiyatlandırma katmanında Premium seçmenin bazı güvenlik adımlarında kolaylık sağlıyor. Dilerseniz Premium katmanını 14 gün ücretsiz deneyebilirsiniz.
Hizmeti oluşturduktan sonra kendi sayfasında "Overview" bölümden "Launch Workspace" butonu ile çalışma ortamına geçebilirsiniz.
Çalışma ortamını Data Science & Data Engineer, Machine Learning ve SQL seçimleri yaparak hedefinize uygun görünüme kavuşturabilirsiniz.
Öncelikle Compute bölümünden Cluster oluşturmanız gerekli. Spark versiyonu ve cluster yapısını oluşturduktan sonra Data bölümünden ara yüzle tablo oluşturabilir, Workspace bölümünden Notebook açarak tercih ettiğiniz bir dilde çalışmaya başlayabilir, tetiklediğiniz işlemleri Jobs bölümünden takip edebilirsiniz.
Databricks notebook, diğer notebooklara göre daha kullanışlı ve stabildir. Farklı dillere kolayca geçiş yapmak, dashboardlar oluşturabilmek ve yenilenmelerini zamanlayabilmek gibi seçenekler var. Kod yazarken yardımcı olan intellisence özelliği de tatmin edici.
Azure Databricks'in optimize bir Spark engine olması, notebook'un kullanışlılığı ve Azure'un diğer hizmetleri ile entegre çalışabilmesi yerel kaynaklara yatırım yapmak istemeyip Spark ile çalışmak isteyenler için ideal bir çözüm olarak karşımıza çıkıyor. Büyük Veri işlemek için kullanışlı ve güçlü ortam.
Bir yazı ile Azure Databricks'in tüm özelliklerine değinmek mümkün değil. Bu yazımızda tam bir kullanımdan daha ziyade hizmet üzerinden kuş bakışı geçtik. Yapılabilecek çok fazla şey var. Mesela şu video ile akan veri analizi için Databricks ve IoT Hub kullanımına bir göz atabilirsiniz.