David Chappell Microsoft Azure Veri Teknolojileri: Genel Bilgiler Microsoft Corporation Sponsorluğunda Telif Hakkı © 2014 Chappell & Associates İçindekiler Blobs ................................................................................................................................................................... 3 Sanal Makinede DBMS Çalıştırma ....................................................................................................................... 4 SQL Database ...................................................................................................................................................... 5 DocumentDB ....................................................................................................................................................... 7 Tables ................................................................................................................................................................. 8 HDInsight .......................................................................................................................................................... 10 Hadoop MapReduce .............................................................................................................................................10 Hadoop HBase.......................................................................................................................................................12 Search ............................................................................................................................................................... 13 Sonuç ................................................................................................................................................................ 15 Yazar Hakkında ................................................................................................................................................. 15 2 Bulut üzerindeki verilerin analiz edilmesi ve yönetilmesi en az başka yerlerdeki veriler kadar önemlidir. Microsoft Azure bu konuda size yardımcı olmak amacıyla ilişkisel ve ilişkisel olmayan veri tabanlarıyla çalışırken kullanılabilecek teknolojiler sağlamaktadır. Bu incelemede bazı önemli seçenekler tanıtılmaktadır. Blobs “Blob” sözcüğü “ikili büyük nesne” (Binary Large OBject) ifadesinin kısaltılmış halidir ve tam olarak bir parçanın ne olduğunu ifade eder: ikili bilgi koleksiyonu. Bloblar sade olmakla birlikte oldukça faydalıdır. Şekil 1'de bu bulut platformu tarafından sağlanan temel depolama servisi olan Azure Blobs'un temelleri gösterilmektedir. Şekil 1: Azure Blobs kapsayıcılarda ikili verileri—blobları—depolar. Blobların kullanılabilmesi için öncelikle bir depolama hesabı oluşturulmalıdır. Bu kapsamda, bu hesap yardımıyla oluşturulan öğelerin saklanacağı Azure veri merkezi belirlenir. Daha sonra depolama hesabında bir ya da daha fazla kapsayıcı, bu kapsayıcılar içinde ise bloblar oluşturulur. Azure iki farklı türde blob sağlamaktadır. Seçenekler şunlardır: Her biri 200 gigabyte'a kadar veri barındırabilen blok bloblar. İsminden de anlaşılabileceği üzere blok blob, belirli sayıda alt bölüme ayrılmıştır. Blok blob aktarılırken bir arıza olduğunda yeniden iletim, bütün blobu tekrar göndermek yerine en son bloktan devam edebilir. Her biri bir terabayt büyüklüğünde olabilen sayfa blobları. Sayfa blobları rastgele erişim için tasarlanmıştır, yani her biri belirli sayıda sayfaya bölünmüştür. Blobda tekil sayfaları rastgele olarak okuyabilen ve yazabilen ücretsiz bir uygulama. Örneğin Azure’unAzure Virtual Machinesadlı servis olarak altyapı (IaaS) teknolojisinde sanal makineler için kalıcı depolama olarak sayfa blobları kullanılır. Blok bloblar veya sayfa bloblarından hangisini seçerseniz seçin uygulamalar, blob verilerine doğrudan RESTful arabirimi aracılığıyla veya Azure Storage Client kitaplığını kullanarak erişim sağlayabilir ve bu, ham RESTful servisleri için daha geliştirici dostu bir sarmalayıcı sağlar. Bloblar aynı zamanda başka teknolojilerde sahne arkasında kullanılmaktadır. Bunun örneklerinden biri, verilerin nasıl kullanıldığına göre yerel disk ile Azure Blobs arasında veri aktarımı yapan bir saha uygulaması olan Microsoft StorSimple'dır. Bloblar, aşağıda anlatılan şekilde başka Azure veri teknolojilerinde de kullanılmaktadır. 3 Donanım arızalarına karşı önlem alınması ve kullanılabilirliğin iyileştirilmesi amacıyla her blob, Azure veri merkezindeki üç fiziksel sunucuda çoğaltılmaktadır. Bir bloba yazıldığında dönüş öncesinde üç kopyanın tamamı güncellenir, böylece daha sonraki okumalarda tutarsız sonuçlar söz konusu olmaz. Daha net ifade etmek gerekirse bloblar, güçlü tutarlılık olarak bilinen niteliği sağlar. Ayrıca blobdaki verilerin aynı coğrafi bölgede ancak en az 500 mil mesafede bulunan bir Azure veri merkezine kopyalanmasını sağlayabilirsiniz. Coğrafi çoğaltma olarak ifade edilen bu kopyalama blob güncellendikten sonra birkaç dakika içinde gerçekleşir ve felaket kurtarma anlamında oldukça faydalıdır. Bloblardaki verilere Azure Content Delivery Network (CDN)aracılığıyla da erişim sağlanabilir. Blob verilerinin kopyalarının dünyanın dört bir yanındaki düzinelerce sunucu yardımıyla önbelleğe alınmasıyla CDN, tekrarlı olarak erişim sağlanan verilere erişimi hızlandırabilir. Bloblar basit olmalarının yanı sıra birçok durumda doğru tercihtir. Video ve ses depolama ve akışının yanı sıra yedeklemeler ve diğer veri arşivleri de bariz örnekler arasındadır. Geliştiriciler yapılandırılmamış verilerin saklanması için de bloblardan faydalanabilir. İkili verilere basit ve düşük maliyetli bir erişim imkanının son derece faydalı olduğu anlaşılmıştır. Sanal Makinede DBMS Çalıştırma Günümüzde birçok uygulama, belirli bir veritabanı yönetimi sistemi (DBMS) ile çalışmaktadır. SQL Server gibi ilişkisel sistemler en sık kullanılan seçenektir ancak topluca NoSQL grubunda değerlendirilen ilişkisel olmayan yaklaşımların popülerliği her geçen gün artmaktadır. Bulut uygulamalarının veri yönetimi seçeneklerinin kullanmasını mümkün kılmak amacıyla Azure, IaaS SM'de DBMS (ilişkisel veya NoSQL) çalıştırabilmenizi sağlamaktadır. Şekil 2'de bunun SQL Server ile nasıl göründüğü gösterilmiştir. Şekil 2: Azure Sanal Makineleri bloblar tarafından sağlanan kesintisizlikle SM'de DBMS çalıştırılabilmesini sağlar. Bu senaryo hem geliştiriciler hem de veritabanı yöneticileri için, aynı yazılımı kendi veri merkezlerinde çalıştırmak gibidir. Burada gösterilen örnekte SQL Server özelliklerinin neredeyse tamamı kullanılabilir ve sisteme tam yönetici erişimi sağlanmaktadır. Aynı zamanda yerel olarak çalıştırıldığında olduğu gibi veritabanı yöneticisinin yönetilmesi sorumluluğu da sizin üzerinizdedir. Şekilde gösterildiği gibi veritabanınız, sunucunun üzerinde çalıştığı SM'nin yerel diskinde depolanmış gibi görünmektedir. Ancak esasen bu disklerin her biri bir Azure blobuna yazılmıştır. (LUN şeklinde işlev gören blob ile kendi veri merkezinizde SAN kullanmak gibidir.) Herhangi bir Azure blobunda olduğu üzere içerdiği veriler veri merkezi içinde üç kez çoğaltılır ve tercih etmeniz halinde aynı bölgedeki bir başka veri merkezinde coğrafi olarak çoğaltılır. Daha fazla güvenilirlik için SQL Server veritabanı yansıtması gibi seçenekler de kullanılabilir . 4 SM'de DBMS çalıştırma ile ilgili yaygın ve oldukça makul bir senaryo kuruluşun bir saha uygulamasını Azure'a taşımasıdır. Farklı bir veri teknolojisine geçmektense halihazırda çalışmakta olanı kullanmak daha kolaydır. Ancak Azure üzerinde oluşturulan yeni uygulamalar için aşağıda anlatılan veri teknolojilerinden birinin kullanılması daha iyi bir çözüm olacaktır. SQL Database SM'de DBMS çalıştırmak bulut üzerinde veri yönetmek söz konusu olduğunda birçok kişinin aklına gelen ilk seçenektir. Ancak bu tek seçenek olmadığı gibi her zaman en doğru yaklaşım da değildir. Bazı durumlarda Servis olarak Platform (PaaS) teknolojisi kullanılarak veri yönetimi yapmak daha makul bir seçenektir. PaaS çözümü sizin için Azure tarafından yönetilir ve tipik olarak ayarlanması daha hızlı, idaresi daha az zahmetli ve yönetimi daha uygun maliyetlidir. Azure‘un ilişkisel veriler için yönetilen servisi SQL Database'dir. Şekil 3'te bu fikir gösterilmektedir. Şekil 3: SQL Database ilişkisel veriler için yönetilen servis sağlar. SQL Database müşterilere kendi SQL Server fiziksel örneklerini vermez. Bunun yerine her bir müşteri, veritabanları ve ilişkisel tablolar oluşturabileceği bir mantıksal SQL Database sunucusu alır. Bloblarda olduğu gibi SQL Database'de de tüm veriler Azure veri merkezindeki üç farklı fiziksel sunucuda çoğaltılır ve veritabanları için dahili olarak yüksek kullanılabilirlik sağlanır. Bir uygulama için SQL Database, SQL Server'a oldukça benzerdir. Uygulamalar ilişkisel tablolara göre SQL sorguları yayınlayabilir, T-SQL'de saklanan prosedürleri kullanabilir ve veritabanındaki birden fazla tabloda işlem yürütebilir. Uygulamalar SQL Database'e erişim SQL Server'ında kullanılan yaklaşım ile aynı şekilde Tabular Data Stream (TDS) protokolünü kullanarak erişim sağladığından Entity Framework, ADO.NET, JDBC ve diğer sık kullanılan veri erişim arabirimleri ile veri üzerinde çalışabilirler. Ancak SQL Database Azure veri merkezlerinde çalışan bir bulut servisi olduğundan disk kullanımı gibi sistemin fiziksel unsurlarını yönetmeniz gerekli değildir. Ayrıca yazılımı güncelleme veya diğer alt düzey yönetim görevleri gibi konularla ilgilenmenize de gerek yoktur. Her müşteri organizasyonu tabi ki şemalar ve oturum açmalar da dahil olmak üzere kendi veritabanını yönetmeye devam eder ancak gündelik yönetim görevlerinin birçoğu sizin için halledilir. 5 SQL Database kullanmak başka bir şekilde kendi SQL Server örneğinizi çalıştırmaktan farklıdır. SQL Database paylaşımlı bir servis olduğundan farklı organizasyonlara ait çok sayıda uygulama tarafından eşzamanlı olarak kullanılmaktadır. Başka uygulamaların nasıl kullanacağını öngöremeden servisten ihtiyaç duyduğunuz performansı alacağınızdan nasıl emin olabilirsiniz? Yanıt, SQL Database kullanıcılarının her biri belirli miktarda iş üreten belirli sayıda veritabanı iş üretme ünitesi (DTU) için ödeme yapıyor olmasıdır. Uygulamanızın ihtiyaç duyduğu DTU'ları satın alarak bu paylaşımlı servisten öngörülebilir bir performansı garanti edebilirsiniz. Farklı uygulamalar için farklı iş performansları gereklidir ve bu nedenle SQL Database, her birinde farklı sayıda DTU bulunan üç farklı seviyede servis sağlar: İşlem iş yükü göreceli olarak düşük uygulamalar için Basic. Ana akım iş uygulamalarını destekleyecek şekilde tasarlanmış Standard. Geniş ölçekli ve kritik veritabanlarını destekleyen Premium. SQL Database aşağıdakiler de dahil başka servisler de sağlar: Veritabanınızın gerçekleştirilmiş olan işlemlerin asenkron olarak aktarılmış olduğu kopyalarını başka Azure veritabanlarında tutmanızı mümkün kılan coğrafi çoğaltma. Yalnızca ana kopya okunur/yazılır olmakla birlikte aktif coğrafi çoğaltma adlı bir seçenekle diğerlerini de okunabilir hale getirebilirsiniz. Bu, başka işlevlerinin yanı sıra, ana kopyanın bulunduğu veri merkezinde bir sorun olması halinde verilerin doğru bir kopyasına bir başka kopyadan ulaşılabilir olması anlamında, felaket kurtarma durumunda oldukça faydalıdır. Veritabanlarının kopyalarını otomatik olarak oluşturan SQL Database ile yedekleme ve geri yükleme. Bu yedekleri, bir veritabanını belirli bir zamandaki durumuna geri döndürmek için kullanabilirsiniz. Servis aynı zamanda farklı bir Azure veri merkezinde yedekler saklamanızı mümkün kılar ve ana veri merkezi çalışamaz hale gelse dahi ulaşılabilir olmalarını sağlar. Veritabanı okuma, yazma ve diğer tür erişimleri takip eden denetim. Bu tür bir denetim izi belirli uyumluluk gereksinimlerinin karşılanması için gerekli olabilir ve başka şekillerde de faydalıdır. Örneğin uygulamaların verilerinizi nasıl kullandığına dair ayrıntılı bir görünüm, güvenlik ihlallerini algılamanıza ve veritabanının ne zaman ve nerede çoğaltılması gerektiğini anlamanıza yardımcı olabilir. SQL Database ile SQL Database veya SQL Server'daki başka bir veritabanı arasında veri senkronizasyonu yapabilmenizi mümkün kılan SQL Data Sync. Verilerin SQL Database'de saklandığı şekilde birden fazla Azure veri merkezinde bir uygulama çalıştırdığınızı ve tüm kopyaların okunur/yazılır olmasına ihtiyaç duyduğunuzu varsayalım. SQL Data Sync'i kullanarak bu verileri senkronize halde tutabilirsiniz (bu senkronizasyon tüm kopyalarda tam olarak anlık değildir, bir miktar gecikme söz konusudur). SQL Data Sync'i kullanarak ayrıca saha uygulamaları tarafından kullanılan yerel bir SQL Server veritabanı ile Azure üzerinde çalışan uygulamalar tarafından kullanılan SQL Database üzerindeki bulut kopya arasında veri senkronizasyonu sağlayabilirsiniz. Amaç, çeşitli gereksinimleri bulunan bir dizi senaryoyu desteklemektir. SQL Database’in PaaS yaklaşımı, veri yönetimini daha kolay ve daha uygun maliyetli hale getirdiğinden, birçok durumda doğru tercih olabilir. 6 DocumentDB İlişkisel veri kesinlikle faydalıdır ancak tek seçenek değildir. NoSQL çözümleri giderek daha popüler hale gelmektedir. Bunun nedenlerinden biri ilişkisel veritabanlarının ölçeklendirilmesinin zorluğudur, yani çok sayıda kullanıcı ve verinin yönetileceği bir uygulama oluşturuyorsanız başka bir yere bakmanız gerekebilir. Geliştiriciler NoSQL veritabanlarını aynı zamanda uygulama verilerinin ilişkisel tablolarla eşlenmesinin sorun olmaması nedeniyle tercih etmektedir; daha sade bir platformdan veya sabit bir şemanın kısıtlamalarından kaçınmak istemektedirler ya da başka nedenler söz konusudur. Belge veritabanları başlıca NoSQL kategorileri arasındadır ve bütün bunları sağlayabilir. İlişkisel DBMS'de olduğu gibi Azure SM'ler ile kendi başınıza belge veritabanı çalıştırabilirsiniz; günümüzde birçok kişi MongoDB veya başka seçeneklerle bunu yapmaktadır. Bu yaklaşımın kullanılmasını kolaylaştırmak amacıyla Azure, bir PaaS belge veritabanı servisi olan DocumentDB'yi sağlamaktadır. Şekil 4'te bu yönetilen servisin temel öğeleri gösterilmiştir. Şekil 4: DocumentDB koleksiyonlarda JSON belgelerini depolayan bir yönetilen servis sağlar. DocumentDB'de uygulama verilerinin tamamı koleksiyonlar halinde gruplandırılmış belgeler içinde saklanır. Her belgede basit bir metin tabanlı format olan JavaScript Object Notation'da (JSON) anlatılan veriler yer alır. Şekilde gösterildiği üzere bir koleksiyonda benzer veriler veya tamamen farklı veriler içeren belgeler bulunabilir; sabit bir şema söz konusu değildir. DocumentDB aynı SQL Database gibi yönetilen bir servis olduğundan DBMS altyapısı kurma ya da yönetme ihtiyacı söz konusu değildir. Bu verilerle çalışmak için uygulamaların tamamı sonuç olarak JSON veren birkaç seçeneği bulunmaktadır. Seçenekler şunlardır: Uygulamalar DocumentDB’nin RESTful arabirimini doğrudan veya .NET, JavaScript, Python ve diğer ortamlar için sağlanan istemci kitaplıkları üzerinden kullanabilir. Servis DocumentDB SQL adlı bir sorgu dili sağlar. Adından da anlaşılacağı üzere bu dilin söz dizimi, günümüzün en yaygın kullanılan sorgu dili olan SQL'i temel almaktadır. 7 DocumentDB, her ikisi de JavaScript'te yazılmış ve servisin içinde çalışan kayıtlı prosedürleri ve tetikleyicileri destekler. Document DB verilere hızlı erişim sağlayacak şekilde tasarlanmıştır. Bunun yöntemlerinden biri her JSON belgesindeki tüm verilerin otomatik olarak dizinlenmesidir. Örneğin Şekil 4'te gösterilen belgelerde sistem, her bir belgedeki ad, ülke, yaş, görev, seviye ve diğer JSON öğeleri için otomatik olarak dizinler oluşturur. Geliştiricilerin hangi verilere hızlı erişim sağlamak istediklerine ve dolayısıyla hangi dizinlerin oluşturulacağına önceden karar vermeleri yerine DocumentDB, her şeyi dizinler. Tek bir veritabanında çeşitli farklı sunuculara dağılmış birçok koleksiyon bulunabilir. Sonuç olarak her DocumentDB veritabanında yüzlerce terabayt veri bulunabilir. Ancak verilerin bu şekilde bölünmesi çeşitli kısıtlamalar getirir. Birden fazla güncellemenin tek bir işleme paketlenmesi mümkün olmakla birlikte bu güncellemelerin tamamının aynı koleksiyondaki belgeler olması gerekmekte, bir işlem birden fazla koleksiyona bakamamaktadır. Aynı zamanda bir uygulama tarafından yapılan her istek belirli bir koleksiyonu hedeflemelidir, yani bir uygulamanın aradığı verilerin nerede saklandığını bilmesi gerekir. Diğer Azure veri servisleri gibi DocumentDB, farklı makinelerde her koleksiyonun birden fazla kopyasını tutar. Bu, servisin hem performansını hem de güvenilirliğini artırır. Ancak DocumentDB güçlü bir tutarlılığı zorunlu kılmaz. Güçlü bir tutarlılık, uygulamaların eski verileri veya güncellemeleri görmemesini sağlamakla birlikte işleri de yavaşlatabilir. Yine de bazı uygulamalarda daha yüksek performans sağlanacak olması halinde eski verilerin görülmesi kabul edilebilir, yani DocumentDB güçlü bir tutarlılık sağlamamakla birlikte başka seçenekler sunmaktadır. Amaç geliştiricilerin performans ile tutarlılık arasında uygulamaları için en uygun tercihi yapmalarıdır. Belge veritabanları hızla popülerlik kazanmaktadır. Geliştiriciler basit veri modelinden, gerekli bir şemanın söz konusu olmamasından, ölçeklenebilirlikten ve çok daha fazlasından hoşlanırlar. DocumentDB'nin amacı bu faydaları yönetilen servisin sadeliği ile birleştirirken SQL tabanlı bir sorgu dili ve kayıtlı prosedürler gibi standart veritabanı özelliklerini de sağlamaktır1. Tables NoSQL veritabanları çeşitli şekillerde gelir. Günümüzde popüler olan bir yaklaşım anahtar/değer mağazası yaklaşımıdır. Uygulamanızın geniş miktarda gevşek yapılandırılmış veriye hızlı ve kolay erişimi gerekliyse bu NoSQL tarzı en iyi seçeneğiniz olabilir. Azure Tables bir PaaS anahtar/değer mağazası sağlar. Diğer bir ifadeyle bu NoSQL tarzını yönetilen servis olarak sunar. Ancak kafanız karışmasın: adına rağmen Tables standart ilişkisel tabloları desteklemez. Bunun yerine bir grup veriyi belirli bir anahtarla ilişkilendirir ve bir anahtar ile uygulamanın bu verilere ulaşabilmesini sağlar. Şekil 5'te bu fikir gösterilmektedir. 1Bu konuda daha fazla bilgi almak için bkz.DocumentDB'ye Giriş: Microsoft Azure için NoSQL Veritabanı. 8 Şekil 5: Azure Tables, büyük miktarda veriye hızlı ve kolay erişim sağlayan bir yönetilen servistir. Şekilde gösterildiği gibi her tablo, her birinde ayrı bir makinenin saklanabildiği belirli sayıda bölüme ayrılmıştır. Her bölüm birden fazla makinede çoğaltılır ve Tables, okuma ve yazma için güçlü tutarlılık sağlar. Azure Blobs gibi uygulamalar bir tabloya RESTful arabirimi aracılığıyla doğrudan veya Azure Storage Client kitaplığı tarafından sağlanan paketleyiciler ile erişim sağlayabilir. Tablodaki her bölüm, her birinin belirli sayıda özelliği bulunan bir grup varlığı saklar. Her özelliğin bir adı, tipi (Binary, Bool, DateTime, Int veya String gibi) ve değeri bulunur. Bu tabloların sabit bir şeması yoktur ve aynı tablodaki farklı varlıkların farklı tiplerde farklı özellikleri bulunabilir. Örneğin bir varlıkta yalnızca ad içeren bir String özelliği bulunurken aynı tablodaki bir başka varlıkta müşteri kod numarası ve kredi değeri içeren iki Int özelliği bulunabilir. Bir tablodaki belirli bir varlığın belirlenebilmesi için bir uygulama, varlık anahtarını sağlar. Anahtarın iki kısmı vardır: belirli bir bölümü tanımlayan bölüm anahtarı ve bu bölümdeki bir varlığı tanımlayan satır anahtarı. Örneğin Şekil 5'te istemci, bölüm anahtarı B ve satır anahtarı 1 varlığını istemektedir. Azure Tables içerdiği tüm parametrelerle birlikte bu varlığı verir. Bu yapı çok büyük tablolara izin verir ve içerdikleri verilere hızlı erişimi mümkün kılar. Ancak bunun sınırlamaları da vardır. Örneğin tabloları veya tek bir tablodaki bölümleri kapsayan işlem güncellemeleri için destek söz konusu değildir. Tabloya yapılacak bir dizi güncelleme, tüm varlıkların aynı bölümde bulunması halinde yalnızca atomik bir işlemde gruplanabilir. Ayrıca ikincil dizinler oluşturulamaz (yani anahtar dışındaki özellikler dizinleri) ve birden fazla tablo içeren birleştirmeler desteklenmez. Standart ilişkisel veritabanlarının aksine Azure Tables, saklı yordamları veya tetikleyicileri desteklemez. 9 Azure Tables çok sayıda gevşek yapılandırılmış veriye hızlı ve uygun maliyetli erişime ihtiyaç duyan uygulamalar için iyi bir seçenektir. Örneğin çok sayıda kullanıcı için profil bilgilerini saklayan bir internet uygulaması Tables'dan faydalanabilir. Bu durumda hızlı erişim önemlidir ve uygulamanın muhtemelen ilişkisel veritabanının tam gücüne ihtiyacı yoktur. Hız ve büyüklük için bu işlevsellikten vazgeçilmesi faydalı olabilir ve Tables, bu tür durumlar için en doğru çözüm olabilir. HDInsight Son birkaç yılda veri analizleri ile ilgili düşüncelerimiz önemli ölçüde değişmiştir. Şu anda çok miktarda veri kullanılabilmektedir ve depolamanın giderek düşen maliyeti dikkate alındığında bunlar niçin kaydedilmesin? Peki bu verileri standart veri ambarlarının kullandığı ilişkisel formata dönüştürmekle niçin uğraşılsın? Bunun yerine veriler niçin yapılandırılmamış biçiminde bırakılmasın ve bununla akıllı olarak çalışabilen uygulamalar oluşturulmasın? Bu verilerin saklanması ve analiz etmek için gereken uygulamaların oluşturulması için yeni bir tür yazılım temeli gereklidir. Sektörümüzde bunun için belirli bir yaklaşım geniş ölçüde oturmuştur: Hadoop adlı bir açık kaynak teknolojisi. Tek bir adı olmakla birlikte Hadoop, esasen sunucu kümesi üzerinde çalışacak şekilde tasarlanmış bir teknoloji grubunun adıdır. Şekil 6'da temel hususlar gösterilmektedir. Şekil 6: Hadoop, sunucu kümeleri üzerinde çalışan bir grup teknolojidir. Çok miktarda veriyi uygun maliyetle saklamak için Hadoop, Hadoop Distributed File System'a (HDFS) sahiptir. HDFS düşük maliyetli standart disklerle yüksek boyutlu dosyaların saklanmasını mümkün kılar. Bunun yanı sıra Hadoop, Yet Another Resource Negotiator'a (YARN)sahiptir. YARN küme yönetimi yazılımıdır ve küme üzerinde çeşitli başka teknolojiler içerir. Örneğin bir Hadoop kümesinde büyük verilerin analiz edilmesi için dağıtık uygulamalar oluşturulmasını destekleyen MapReduce kullanımı yaygındır. Şekilde gösterildiği üzere Hadoop ailesinde doğrudan HDPS üzerinde çalışan bir NoSQL veritabanı olan HBase öğesi de yer alır. Azure HDInsight bütün bu teknolojileri destekleyen bir yönetilen servistir. Bu bölümün geri kalanında HDInsight'ın en görülür iki unsuruna daha yakından bakılmaktadır: MapReduce ve HBase. Hadoop MapReduce Organizasyonlar yıllardır veri ambarları inşa etmektedir. Genellikle ilişkisel tablolarda saklanan bu bilgi koleksiyonları ile insanlar birçok farklı şekilde çalışabilir ve öğrenebilir. Örneğin SQL Server ile bunun için SQL Server Analysis Services gibi araçlar kullanmak oldukça yaygındır. 10 Ancak ilişkisel olmayan verileri analiz etmek istediğinizi düşünelim. Verileriniz birçok şekilde olabilir: algılayıcılardan veya RFID etiketlerinden gelen bilgiler, sunucu gruplarındaki günlük dosyaları, web uygulamaları tarafından oluşturulan tıklatma dizisi verileri, tıbbi tanılama cihazlarından görüntüler, vs. İlişkisel olmamasının yanı sıra bu veriler, klasik veri ambarında kullanım için fazla büyük olabilir. Birkaç yıl öncesine kadar sık rastlanmayan bunun gibi büyük veri sorunları artık oldukça yaygındır ve Hadoop MapReduce tam olarak bunun için tasarlanmıştır. MapReduce dağıtık uygulamaların bir makine kümesinde çalıştırılmasına yönelik bir çerçeve sağlar. Genel anlamda uygulamanın her bir parçası, parçanın üzerinde çalıştığı makinedeki verilerle çalışır. Veriler paralel olarak işlendiğinden büyük veri kümeleri dahi makul bir sürede analiz edilebilir. MapReduce uygulaması ne kadar çok makine kullanırsa, yaptığı işi o kadar hızlı tamamlayabilir. Bu tür bir sorun genel bulut için doğal bir sonuçtur. Zamanın büyük bir kısmında boş oturacak saha sunucularından oluşan bir ordu beslemektense bulut üzerinde Hadoop çalıştırarak yalnızca ihtiyacınız olduğunda SM'ler oluşturabilir ve yalnızca gerektiğinde ödeme yapabilirsiniz. Daha da önemlisi bulut üzerinde Hadoop MapReduce ile analiz etmek isteyeceğiniz veriler giderek daha fazla oluşturulmakta ve taşınması sorunu ortadan kalkmaktadır. Şekil 7'de Azure üzerinde HDInsight MapReduce gösterilmektedir. Şekil 7: Azure HDInsight, birden fazla sanal makine kullanarak paralel şekilde veri işleyen MapReduce işlerini çalıştırır. HDInsight kullanmak için öncelikle bu yönetilen servisten, ihtiyaç duyulan SM sayısı belirlenerek bir Hadoop kümesi oluşturması istenir. Bir Hadoop kümesi oluşturmak kolay bir işlem değildir ve bunu Azure'un yapmasına izin vermek oldukça makuldür. Küme çalışmaya başladıktan sonra genellikle iş adı verilen MapReduce uygulamasını gönderebilirsiniz. Şekilde gösterildiği gibi iş, çok sayıda SM'de eşzamanlı olarak çalışır. Ancak HDInsight, HDFS yerine Azure Blobs'u kullanır. Bloblar bazı açılardan HDFS'ye benzer, örneğin her ikisi de birden fazla fiziksel sunucuda veri çoğaltır. Bu işlevselliği kopyalamak yerine HDInsight, bunun yerine şekilde gösterildiği üzere Blobları HDFS API aracılığıyla açar. MapReduce işinin mantığı standart HDFS dosyalarına erişim 11 sağladığını düşünmekle birlikte iş aslında bloblarda depolanan verilerle çalışmaktadır. Birden fazla işin aynı veriler üzerinde çalıştığı durumların desteklenmesi amacıyla HDInsight, verilerin bloblardan SM'lerde çalışan HDFS'ye kopyalanmasını destekler. MapReduce işleri günümüzde genellikle Java'da yazılmakta ve bu yaklaşım HDInsight tarafından desteklenmektedir. Microsoft, MapReduce işlerinin C#, F# ve JavaScript de dahil başka dillerde de oluşturulabilmesi için gereken desteği eklemiştir. Amaç bu büyük veri teknolojisini daha çok geliştirici için ulaşılabilir kılmaktır. Yine de MapReduce işlerinin yazılması çok kolay değildir, oldukça özel bir beceri gerektirir. Bunu kolaylaştırmak adına insanlar genellikle, kendileri MapReduce işleri yazmadan verileri analiz etmelerini mümkün kılan başka teknolojiler kullanmaktadır. Örneğin Pig büyük verileri analiz etmek için tasarlanmış üst düzey bir dilken Hive, HiveQL adlı SQL benzeri bir dil sağlar. Pig ve Hive esasen MapReduce işleri oluşturabilir, ancak bu karmaşıklığı kullanıcılarından saklarlar. HDInsight'ta hem Pig hem de Hive bulunmaktadır. Microsoft aynı zamanda iş analistlerinin MapReduce işlerini doğrudan Excel üzerinden oluşturmalarını ve çalıştırmalarını, ardından PowerPivot ve diğer Excel araçlarını kullanarak sonuçları işlemelerini ve görselleştirmelerini mümkün kılan bir Excel eklentisi sağlamaktadır. Buradaki amaç bu dağıtık veri analizi programının geniş bir yelpazede kullanıcılar tarafından kullanımını mümkün kılmaktır. Hadoop HBase MapReduce'un Hadoop ailesinin en göz önündeki üyesi olduğu söylenebilir. İnsanlar “Hadoop” derken genellikle yalnızca yapılandırılmamış verilerin paralel analizine yönelik bir platform olarak işlevini kastetmektedirler. Ancak Hadoop bundan fazlasını sunar. Örneğin HBase'e sahiptir. HBase bir NoSQL veritabanıdır. HDFS üzerinde çalışmakla birlikte veri okuma ve yazma uygulamalarını desteklemeye yöneliktir, veri analizi odaklı değildir. HBase'i bunun yerine kendi veri organizasyonu yöntemlerine sahip bir DocumentDB veya Tables alternatifi olarak düşünün. Şekil 8 HBase'in bunu nasıl yaptığını göstermektedir. Şekil 8: Azure HBase, birçok satıra ve sütuna sahip geniş ve seyrek tabloları destekler. 12 HBase, sütun ailesi mağazası adı verilen NoSQL tarzının örneğidir. Şekilde gösterildiği üzere verileri satırlar ve sütunlarla birlikte tablolarda saklar. Sütunların aileler şeklinde gruplandırılmış olması sayesinde uygulama; sütun ailesi, sütun tanımlayıcı ve satır anahtarının belirli bir kombinasyonunu kullanarak verilere erişebilir. Bu örnekte uygulama, sütun ailesi F1, sütun C2, satır 3'teki verileri istemektedir. Burada gösterilmemekle birlikte HBase tablosundaki bir hücre, verilerin çoklu zaman etiketli versiyonlarını içererek uygulamanın hangi sürümü istediğini belirlemesini mümkün kılabilir. HBase şekilde gösterildiği üzere tabloyu bölgelere ayırır ve farklı bölgeler farklı sunucularda saklanır. DocumentDB ve Azure Tables'da olduğu gibi verilerin bu şekilde çeşitli makinelere dağıtılması sistemi daha ölçeklendirilebilir hale getirir. Esasen tek bir HBase tablosunda milyonlarca sütun, milyarlarca satır ve yüzlerce terabayt veri bulunabilir. Ancak bir HBase tablsunun oldukça seyrek olması da yaygındır; sistemin fiziksel depolama alanı bu verimliliği sağlayacak şekilde tasarlanmıştır. Her bir bölgenin birden fazla çoğaltması, Azure veri merkezindeki farklı makinelerde saklanır ve kullanılabilirlik ve performans artar. Azure Tables gibi HBase de güçlü tutarlılık sağlar ve böylece uygulama, tablonun zamanı geçmiş veya devre dışı güncellemelerini görmez. NoSQL teknolojilerinde standart olduğu üzere HDInsight HBase'de ilişkisel veritabanlarında standart olan bazı şeyler yoktur. Örneğin sorgu dili veya satır anahtarı dışında dizin oluşturma olanağı bulunmamaktadır. İşlemler yapılabilir ancak sınırlıdır: bir işlemdeki tüm verilerin aynı tablodaki tek bir satırda bulunması gerekir. HBase'de veri türü kavramı yoktur; her şeyi bayt dizisi olarak saklar. Azure üzerinde HBase ile çalışmak için HDInsight kullanarak bir Hadoop kümesi oluşturabilir ve HBase'in bu kümeye uygulanmasını isteyebilirsiniz. MapReduce'da olduğu gibi HDInsight HBase de verileri HDFS değil Azure bloblarında saklar. Çok büyük tablolarla çalışması gereken uygulamalar için HDInsight HBase doğru çözüm olabilir. Search Arama işlevini İnternet'te herkes kullanmaktadır. Veri ile bu şekilde etkileşim hem kolay hem de güçlüdür: az çaba ile çok iş yapılabilir. Ancak sahne arkasında olan biten birçok şey vardır. Aramayı uygulamak kolay değildir. Ne kadar çok insanın arama yaptığı düşünüldüğünde özel uygulamaların da verilerle bu tür çalışmayı desteklemesi mükemmel olacaktır. Her geliştiricinin kendi arama motorunu uygulamaya almasını beklemek makul değildir; bu, çok fazla iş demektir. Gereken birçok farklı uygulamayla kullanılabilecek genel bir arama servisi geliştirmektir. Azure Search tam olarak bunu sağlar. Bir çevrimiçi mağaza oluşturduğunuzu varsayalım. Müşterileriniz tabi ki sitede ilgilendikleri şeylerin aranabilmesini bekleyecektir. Google ve Bing gibi internet arama motorları konusundaki deneyimleri nedeniyle sitenizin arama alt yapısından arama öğeleri ile ilgili yazılırken tavsiyede bulunulması gibi işlevler bekleyeceklerdir. Yönetilen bir servis olan Azure Search'ü kullanarak bütün bunları sağlayabilirsiniz. Şekil 9'da temel hususlar gösterilmektedir. 13 Şekil 9: Azure Search ile kullanıcılar için standart bir arama deneyimi sağlayan uygulamalar oluşturulabilir. Azure Search, uygulamanın kullanıcı tarafından yapılan isteği gönderebilmesini mümkün kılan bir arama motoru sağlar. Arama motoru bu istek ile eşleşen ilgili tüm verileri bulmak için bir dizin sağlar ve sonuç listesini JSON metni şeklinde uygulamaya geri gönderir. Kullanıcı arabiriminin tamamen uygulamanız tarafından tanımlandığına dikkat edin; Azure Search'ün kendi arama arabirimi yoktur. Bunun yerine RESTful arabirimini diğer yazılımların kullanımına açar. Peki uygulamanızın kendi arama işlevine niçin ihtiyacı vardır? Bing ve Google ile uygulamanız yalnızca kapsamı site ile belirlenmiş aramalar yapabilir. Yalnızca bunu kullanmak daha kolay olmaz mıydı? Yanıt evet, daha kolay olurdu. Ancak bu yöntemde birçok şeyden de vazgeçilmiş olur. Örneğin müşterilerin hangi aramaları yaptığını göremez veya sizde bulunmayan neleri aradıklarını fark edemezsiniz. Daha da önemlisi harici bir arama servisi kullanıldığında arama sonuçlarının sıralamasını kontrol edemezsiniz. Örneğin en yüksek kar marjını sağlayan öğelerin daha önce gösterilmesini veya deponuzda mevcut olan ürünlere göre sıralama yapılmasını istiyor olabilirsiniz. Azure Search bütün bu seçenekleri destekleyecek şekilde tasarlanmıştır. Her dizinde aranabilir verileri içeren belirli sayıda alan yer alır. Örneğin çevrimiçi alışveriş amaçlı bir sitenin dizini ürün adı, ürün tipi, ürün tanımı ve markanın yanı sıra müşterilerin muhtemelen arama yapmak isteyeceği başka alanları içerecektir. Aynı zamanda kar marjı gibi müşterinin arama yapamayacağı başka alanlar da yer alabilir. Search ile bunların arama sonuçlarını nasıl etkileyeceğini belirleyebilirsiniz. En bariz örnekler e-ticaret siteleri olmakla birlikte Azure Search, bundan daha fazlası için fayda sağlamaktadır. Sinema tartışma siteleri gibi içeriği kullanıcı tarafından oluşturulan ve kullanıcının ilgilendiği şeyleri arama yoluyla bulduğu bir siteyi düşünün. Bu sitede sonuçları iş gereksinimlerine göre aramak isteyen reklamcılar bulunabilir ve bu, Azure Search ile mümkündür. Uluslararası bir kurumsal uygulamada da, özellikle en kolay arama yoluyla ulaşılabilen çok sayıda ve farklı içerikte veriler varsa, Azure Search kullanılabilir. Kullanıcılar bu tarz erişimi tercih eder ve bir sonraki iş uygulamanızda aramanın desteklenmesi, şirketinizde kişiler tarafından uyarlanmasının daha kolay olmasına yardımcı olabilir. Her durumda arama gerekli olmamakla birlikte kullanıcı, uygulamalarla bu şekilde etkileşim kurmayı giderek daha fazla bekleyecektir. Bunun etkili bir şekilde yapılması için uzman teknoloji gerekir ve Microsoft’un bulut platformu Azure Search'ü sağlamaktadır. 14 Sonuç Veri, son derece önemlidir. Esasen şu anda bilgi teknolojisi adı verilen çalışma alanımız eskiden bilgi işlem olarak anılırdı, ki bu da merkezi verilerin işimiz için ne anlama geldiğini ifade etmektedir. İlişkisel sistemlerin hüküm sürdüğü onlarca yılın ardından veri dünyası genişlemiştir. NoSQL, büyük veri analitikleri, arama ve başka kavramların yükselişiyle artık veriler üzerinde yeni yöntemlerle çalışabiliyoruz. Azure bu nedenle bu kadar geniş bir yelpazede veri yönetimi teknolojileri sağlıyor: Bloblar, SM'de DBMS çalıştırma desteği, SQL Veritabanı, DocumentDB, Tables, HDInsight (Hadoop ve HBase dahil) ve Search. Hangi uygulamayı oluşturmaya çalışırsanız çalışın bu bulut platformunda işinize yarayacak bir şey bulabilirsiniz Yazar Hakkında David Chappell, San Francisco, California'daki Chappell & Associates'in (http://www.davidchappell.com) yöneticisidir. Konuşmaları, yazıları ve danışmanlık hizmetleriyle dünyanın dört bir yanından insanların yeni teknolojileri anlamasına, kullanmasına ve bunlar hakkında daha iyi seçimler yapmasına yardımcı olmaktadır. 15