Map etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Map etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

19 Nisan 2014 Cumartesi

SQL Server 2014 Lansmanı


Geçen çarşamba günü Beşiktaş'ta Swissotel'de Microsoft'un düzenlediği SQL Server 2014 Lansmanı, bilişim dünyasındaki birçok isme yer verdi. Ana tema olarak SQL Server'ın 2014 sürümüyle birlikte gelen in-memory teknolojisiyle en kritik anlarda veritabanı uygulamalarının performansının 50 kat artışı ve Excel ile birlikte PowerBI teknolojisinin sunduğu arayüzler ile verilerin şık bir biçimde modellenmesi yer aldı.

Microsoft Genel Müdür Yardımcısı Begim Başlıgil
Açılış konuşmasını, Microsoft Genel Müdür Yardımcısı Begim Başlıgil üstlendi. Konuşmasında bulut, sosyal ağlar, mobilite ve büyük veri maddelerine değindi. Dünya üzerinde diş fırçasından daha fazla mobil cihazın bulunduğunu bildirerek mobil sektörün geleceğinin önemini ve halihazırda bulunan sunucu sistemlerinin cloud'a taşınması ile kazanılacak avantajları vurguladı.

Açılış konuşmasından sonra Intertech firmasının CEO'su Ömer Uyar konuşmasına başladı ve ticari çözümler için 2005'ten itibaren SQL Server kullandıklarını ve birçok müşterisinin de veritabanı ortamı olarak bu platformu kullandıklarını belirtti. Firmasının ticari çözümlerinden de bahseden Uyar, sözü Adli bilim uzmanı Prof. Dr. Sevil Atasoy'a devretti.

Prof. Dr. Sevil Atasoy
Sevil Atasoy Tom Cruise'un başrol aldığı Azınlık Raporu filmine değindi. Tom Cruise'un Dedektif John Anderton rolünde, psişik güçlere sahip kahinler ve bazı teknolojik aygıtlar sayesinde cinayetleri daha işlenmeden önce farkedip suçluları yakalayan özel bir polis biriminin başında olduğunu ele aldı ve filmde kullanılan teknolojilerin sanıldığı kadar günümüzden çok da uzak olmadığını dile getirdi.
Amerika'nın 11 Eylül saldırıları ile yaşadığı olaylar sonucu suçluların, suç olmadan önce kestirim yapılarak faillerin yakalanması gerektiğini fikrinden yola çıkarak birçok suçlunun bu şekilde yakalandığını ve ülkemizde de bunun hayata geçirilmesi gerektiğini ve  bu yüzden de veritabanı ile entegrasyonun önemli olduğunu vurguladı.

Microsoft Türkiye Ürün Yöneticisi Gökben Utkun
Daha sonra Microsoft Türkiye Ürün Yöneticisi Gökben Utkun konuşmasında, bazı demolar ile SQL Server
2014'ün bellek içi performansına ve PowerBI ile gelen grafiksel istatistiğin detaylarına yer verdi.
Açılış konuşmasının ardından 3 ayrı salonda  "İş Kritik Çözümler", "Büyük Veri" ve "İş Analitiği", "Size Göre Şekillenen Bulut" başlıkları altında Microsoft Türkiye yetkilileri ve iş ortakları SQL Server 2014, PowerBI, Windows Azure yeniliklerini sundular.

Öğle yemeğinin ardından Bulut salonunda Mine Tokuş, "Bulutta Veri Yönetimi"'ni anlattı. Devamında bulutta ilişkisel veri yönetim seçeneklerine değindi:
1) IaaS (Infrastructrue as a Service): SQL Server'ın bir Windows Azure VM üzerinde gerçekleştirildiği tam kontrol ve esneklik sağlayan bir yapıdır. Paas'dekine göre daha fazla özelleştirme yapılabilir.
2) PaaS (Platform as a Service):  Windows Azure SQL Database üzerinde daha basitleştirilmiş bir şekilde işlemlerin yapılmasını sağlar.

Sonrasında Windows Azure SQL Server topolojisine ve Windows Azure'un (WA) 4 katmanlı mimarisine değindi:
1) Client Layer
2) Services Layer
3) Platform Layer
4) Infrastructure Layer
 Son olarak da Azure üzerinde bir VM nasıl kolay bir şekilde kurulacağını adım adım demo olarak anlattı.

Sonraki oturumda Belkıs Özhorasan ve Koray Kocabaş HDInsight ile büyük verilerin bulut ortamında nasıl yönetileceğine değindiler.
Belkıs Özhorasan, dünyada 60 saniyede ne kadar verinin aktarıldığını bir video ile sunarak oturuma başladı. Devamında bu kadar fazla yapısız (unstructured, yani video, resim gibi blob türündeki) verilerin, veritabanı yerine bulut ortamında tutulması gerektiğini savundu. Apache'nin geliştirdiği Hadoop çatısından bahsetti ve Hadoop'un ana amacının, büyük verilerin toplanması yönünde bir çözüm üretmek olduğunu aktardı.
İlişkisel veritabanlarına veri atılırken önce tabloların şemalarının oluşturulması gerektiği için bu yöntemin "Big Data" kavramına uymadığını ve Hadoop'ta verilerin önce depolanarak sonra şemalarının oluşturulması ile daha uygun bir yöntemin olduğuna değindi.
Hadoop'ta tutulacak olan verilerin HDFS (Hadoop Distributed File System) altında tutulduğunu ve bu ortamda verilerin korunumu için her veri başına birçok kopya oluşturuluyor. Dosyalar ve yapılacak işler için ayrı iki tane katman bulunuyor:

MapReduce Layer: MapReduce işlemlerinin gerçekleştirildiği katmandır. Job Tracker, verilen bir işin düğümler üzerinde yürütülmesinden sorumludur. İlgili işi slave'lere bölerek paralel bir şekilde problem çözümünü sağlar.
HDFS Layer: Dosyaların tutulduğu ve data Node'lar arasında bölündüğü yerdir.

Özhorasan devamında bir demo yaparak, verilerin namenode üzerinde nasıl aktarıldığını gösterdi.
Aynı oturumun devamında Koray Kocabaş sözü aldı ve iş zekası alanının sektörde ne kadar önemli olduğuna dair örnekler sundu:
- Borussia Dortmund'un ilas etmek üzereyken, futbolcuların üzerlerine ve kale arkalarına sensörler yerleştirerek analizler yapması sonucu, futbolcuların eksikliklerini görerek ve bu yönlerini gidererek en iyi takımlar arasında yer almasını sağladı.

- Ben Bilmem Eşim Bilir programının bir bölümünde çiğ köfte yeme yarışması düzenlendi. Eşlerinin tahmin ettiği sayıda çiğköfte yemeye çalışan yarışmacılar, izleyicilerin iştahını kabarttı ve o gün müşteri akınına uğrayan çiğköftecilerin gelen siparişleri yetiştiremediklerini ve hatta ellerindeki tüm çiğköfteleri bir anda sattıklarını dile getirdi.

- YemekSepeti müşterilerinden birinin az kazanç yaptığını dile getirmesiyle, YemekSepeti restoranın network loglarını Hadoop yapısında tutarak analiz etmiş ve internet sıkıntısının olduğunu saptamış. Restoranın bulunduğu bölgedeki internet altyapısının düzeltilmesi ile restoranın kazancı %30'dan %80'e arttırılmış.
Yemek Sepeti firmasının bütün alt yapısını SQL Server oluşturduğunu dile getiren Kocabaş, Hadoop üzerinde tutulan verilerin işlenilecek bir kısmının SQLServer'a aktarılarak veri madenciliği yapılması ile analiz işlemlerinin gerçekleştirilebileceğine değindi. Kocabaş, yukarıdaki örnekler gibi daha nicelerinin bulunduğunu ve BI sektöründe önemli atılımların yapılmasını gerektiğini vurguladı.

Sonraki oturumda Cem Kübilay geleneksel veri ambarlarının artık son noktasına ulaştığını ve bulut ile birlikte modern veri ambarlarına yönelmenin önemini vurguladı. Analitik platform sistemlerinin(APS) özelliklerine ve paralel işlem yapma yeteneklerinin oldukça yüksek olduğuna ve petabaytlarca veriler üzerinde çalışabildiğine değindi.

Son oturumda ise Atalay Aktaş Office 365 ile gelen PowerBI'ın yeteneklerine değindi. Excel üzerinde kolayca veri analizi yapılabileceğine ve Power BI ile gelen görselliğin
verinin temsil edilmesi üzerinde ne kadar etkili olduğu üzerinde durdu. Doğal dille (şu an için yalnızca ingilizce) sorguların yapılabilmesini ve dökümünün kolayca alınabilmesinin mümkün olduğunu açıkladı. Bing Map üzerinde interaktif olarak sorguların gerçekleştirimine dair de bir demo sundu.

Benden bu kadar, artık çiğ köfte yemeye gidebilirim.  Bir sonraki etkinlikte görüşmek üzere :)

14 Şubat 2014 Cuma

Büyük Veride Analiz İşlemlerinde MapReduce Kullanımı

Önceki yazımda da anlattığım gibi eğer elimizde oldukça büyük hacimli veriler varsa şu anki ilişkisel veritabanı yönetim sistemleri ile bu verileri saklayabilmemiz ve analiz edebilmemiz mümkün değil. Google tarafından 2004 yılında yayımlanan bir sistem ile bu işlemleri gerçekleştirebilmemiz mümkün hale gelmiştir. Bu sisteme ise MapReduce adını vermişler. Tanımsal olarak MapReduce, büyük veri kümeleri üzerinde dağıtık ve paralel bir şekilde işlem yapmayı sağlayan bir programlama modelidir.  Bu sistem aslen 1960′lı yıllarda geliştirilen fonksiyonel programlamadaki map ve reduce fonksiyonlarından esinlenmiştir. Veriler işlenirken bu iki fonksiyon kullanılır.

  • Map(): Filtreleme ve sıralama işlemlerini gerçekleştirir. Örneğin elimizde öğrencilerin bilgileri varsa, adlarına göre ayrı ayrı kuyruklar oluşturup bunlar üzerinde sıralama işlemleri gerçekleştirebiliriz.
  • Reduce(): İşlemin sonuçlarının birleştirilmesini ve dökümünü sağlar. Şekildeki gibi her bir kuyruktaki şekilleri sayarak isimlerine göre frekanslarının bulunmasını sağlar. 
MapReduce sistemi, dağıtık sunucuları harekete geçirir, çeşitli görevleri paralel olarak çalıştırılmasını sağlar, sistemin çeşitli parçaları arasındaki veri akışını kontrol eder, ve tüm bu işlemleri sistemde redundancy ve hata toleransı sağlayarak gerçekleştirir. 

MapReduce modeli fonksiyonel programlamada yaygın olarak kullanılan map ve reduce fonksiyonlarından esinlenmiştir fakat MapReduce çatısı altında aynı işleri yürütmezler. Ayrıca, MapReduce Framework’ünün en önemli fonksiyonları, asıl map ve reduce fonksiyonları değildir, fakat çeşitli uygulamalarda bu fonksiyonların çalışma motoru optimize etmesiyle, ölçeklenebilirliğe ve hata toleransına ulaşılabilir.


MapReduce çok sayıda bilgisayar (node/düğüm) kullanarak büyük veri kümeleri arasında paralelleştirilebilir problemleri çözmeye yarar. Çok sayıdaki bilgisayarların hepsi aynı yerel ağı kullanıyorlarsa ve benzer donanımlara sahiplerse cluster(küme), coğrafi olarak farklı alanlara yayılmışlarsa ve farklı donanım konfigürasyonlarına sahiplerse grid olarak adlandırılırlar.


İşlenilen veri, veritabanındaki gibi (yapılandırılmış) veya dosya sistemindeki gibi (yapılandırılmamış) bir ortamda bulunabilir. MapReduce’un kalıcı girdi ve çıktıları genellikle dağıtık bir dosya sisteminde saklanır. Geçici veriler ise genellikle yerel diskte saklanır ve reducer’lar tarafından uzaktan getirilir. MapReduce, yerel verileri kendisine daha yakın konumdaki kaynaklarda işleyerek veri aktarımında oluşan gecikmeleri optimize edebilir ve hız artışı sağlayabilir.

Map adımı:
İlk (ana) düğüm girdiyi alır, daha küçük alt problemlere böler ve işçi düğümlere iletir. İşçi düğüm çok seviyeli ağaç yapısının ilk düğümlerinde bulunuyorsa bu işlemi çocuklara aktarmak suretiyle tekrar gerçekleştirebilir. İşçi düğümler ise küçülen problemi işler ve ana düğüme geri iletir.

Reduce Adımı:
Ana düğüm tüm alt problemlerden gelen çözümleri toplar ve birleştirerek belirli bir biçimde dökümünü sağlar.

MapReduce, dağıtık olarak map ve reduction işlemlerinin çalıştırılabilmesine olanak tanır. Her bir map işlemini diğerlerinden bağımsız olarak yürütür. Aslında bu paralellik bağımsız veri kaynakları sayısı ve bu veri kaynaklarının yakınında bulunan işlemci sayısına oranla sınırlıdır. Benzer olarak indirgen kümeleri (reducer), aynı anda aynı anahtarı kullanan map işleminin bütün çıktılarını alarak reduction evresini gerçekleştirebilirler. Bu süreci işleyen, daha sıralı çalışan algoritmalar da var fakat genelde verimsiz çalışıyorlar. MapReduce ise, elimizde yetersiz sunucular olsa bile daha geniş veri kümelerinde uygulanabilir. Örneğin geniş bir sunucu kümesiyle bir petabyte’lık bir veride, MapReduce kullanılarak birkaç saat içerisinde sıralama işlemi tamamlanabilir. Paralelliğin sağlanması ile eğer girdi verisi hala elimizde ise, işlem esnasında herhangi bir sunucu çökse bile, yapılan iş tekrar zamanlanabilir.


MapReduce’un işlem sırası:
  • Map() girdisinin hazırlanması: MapReduce sistemi, Map işlemcilerini tanımlar, her işlemcinin üzerinde çalışacağı K1 girdi anahtarının atamasını yapar, ve işlemciye bu anahtar değeri ile ilişkili bütün girdi verisini iletir.
  • Kullanıcının tanımladığı Map() kodunun çalıştırılması: Map() fonksiyonu her bir K1 anahtar değeri için yalnızca bir kez çalışır ve K2 anahtar değerleri tarafından düzenlenecek çıktıyı oluşturur.
  • Map çıktısının karıştırılarak (shuffle) reduce işlemcilerine iletilmesi: MapReduce sistemi Reduce işlemcilerini tanımlar ve K2 anahtar değerini, çalıştıracak her işlemciye birer birer atar, ve o anki işlemciye bu anahtar ile ilişkili bütün Map’in oluşturduğu çıktı verisini aktarır.
  • Kullanıcının tanımladığı Reduce() kodunun çalıştırılması: Map adımından oluşturulan her K2 anahtar değeri ile ilişkili değer için bir Reduce() fonksiyonu çalıştırılır.
  • Son çıktının üretilmesi: MapReduce sistemi bütün Reduce çıktısını toplar ve son ürünü oluşturmak için K2 anahtarı ile sıralar.
Bu 5 adımı mantıksal olarak üstteki gibi bir sıra halinde çalıştığını düşünebiliriz – her adım, başlamak için önceki adımın bitmesini bekler. Ama pratikte ise adımlar tabi ki iç içedir.


Genelde girdi verisi önceden farklı sunuculara dağıtılmış olur ve bazen Map sunucularına yerel olarak temsil edilen veriler atanarak 1. Adım oldukça basitleştirilmiş bir hale getirilir. Benzer olarak 3. Adımda da, Reduce işlemcilerine yerel Map fonksiyonundan oluşturulan veri aktarılarak bu adım hızlandırılabiliyor.

MapReduce'e mantıksal açıdan bakalım
MapReduce’ün Map() ve Reduce() fonksiyonları (anahtar,değer) alacak şekilde yapılandırılmışlardır. Map fonksiyonu veri alanını (data domain) içeren bir çift veri alır ve farklı bir domain çıktı listesini return eder:
  • Map(k1,v1) -> list(k2,v2)

Map fonksiyonu girdi veri kümesindeki her çift veriye paralel olarak uygulanabilir. Her Map fonksiyonunun çağrımı için ayrı ayrı birer liste oluşturulur. Sonrasında MapReduce sistemi bütün listelerden aynı anahtarlı veri çiftlerini toplar ve her anahtara bir grup düşecek şekilde gruplar.
Sırayla aynı domaindeki verilerden ayrı bir liste üreten Reduce fonksiyonu daha sonra her gruba paralel olarak uygulanabilir.
  • Reduce(k2, list(v2)) -> list(v3)
Her Reduce çağırımı, bir kez çağırıldığı zaman birden fazla değeri geri döndürebilecek kapasitede olsa bile genellikle bir v3 değeri veya bir null değeri döndürür. Bütün fonksiyon çağırımlarından toplanan değerler belirlenen sonuç listesine aktarılır.

Böylece MapReduce sistemi (anahtar,değer) çiftlerinin bulunduğu listeyi değer listesine dönüştürür. Bu davranış, fonksiyonel programlamada keyfi değerlerin bulunduğu bir listeyi alan ve listedeki tüm değerleri sadece tek bir değer olarak düzenleyerek geri döndüren map ve reduce fonksiyonlarından faklıdır.


Örnekler
Aşağıdaki örnek, dökümanlardaki her kelimenin oluşma sıklığını hesaplar:

    function map(String belgeAdi, String belgeIcerigi):
      for each kelime k in belgeIcerigi:
        emit (k, 1)

    function reduce(String kelime, Iterator parcaSayisi):
      kelimeSayisi = 0
      for each parca in parcaSayisi:
        kelimeSayisi += ParseInt(parca)
      emit (kelime, kelimeSayisi)

Burada girdi olarak verilen doküman splitting işleminde önce  satırlara sonra da kelimelere ayrılır. Her kelime bir unique key gibi ele alınır ve ayrı ayrı map fonksiyonu tarafından saydırılır. Sonra shuffling işleminde MapReduce Framework’ü, aynı anahtarlı tüm çiftleri bir araya getirir ve reduce’a iletir. Reducing işleminde aynı anahtarlı kelimeler saydırılır ve nihai sonuç olarak birleştirilir. Böylece bu fonksiyon, sadece girdi değerlerini kullanarak verilen kelimenin toplam görülme sıklığını elde etmiş olur.

Kullanım Alanları
MapReduce dağıtık şablon-temelli (pattern based) aramalarda, dağıtık sıralama işlemlerinde, web tarafından erişilen log istatistiklerinde, belgelerin kümelenmesi işlemlerinde, makine öğreniminde ve istatistiksel makine çevrimi olmak üzere geniş çaplı uygulamalarda kullanılıyor. Çok işlemcili sistemlerde, masaüstü  ağlarında, eyewire uygulaması gibi gönüllü işlem yapma ortamlarında, dinamik bulut sistemlerinde ve mobil tarafında da adapte bir şekilde çalışabiliyor.

MapReduce, Google’da dünyadaki tüm sitelerin indekslerini tamamen yenilemek için kullanılıyordu. Önceden de indeksi güncelleyen ve çeşitli analizler gerçekleştiren programlar kullanıyorlardı. Fakat MapReduce’un üretilmesi ile hepsi rafa kaldırıldı.



Şu an sadece Google değil, Facebook, Twitter, Linkedin, Foursquare gibi çok fazla veri toplayan sosyal ağ uygulamalarında kullanılıyor. Son 2 yılda üretilen verilerin geçen 10 seneden fazla olduğunu düşünürsek, MapReduce sisteminin geleceğinin parlak olduğunu söylemek yanlış olmaz.

MapReduce kütüphaneleri farklı optimizasyon seviyesindeki birçok farklı programlama dili ile yazılmışlardır. Açık kaynaklı popüler implementasyonu ise Apache Hadoop’tur. Sonraki yazımda Hadoop'tan bahsedeceğim, görüşmek üzere... 

Kaynaklar: Wikipedia, Devveri