NoSQL Buğra Çakır 23 Mart 13 Cumartesi Sunum Planı 1. 2. 3. Veritabanı sistemleri, tarihsel gelişim NoSQL Dünyası Hadoop Ekosistemi 23 Mart 13 Cumartesi RDBMS Sistemleri 1. 2. 3. 4. 5. System R, IBM SEQUEL Ingres QUEL Objeler ve bunların ilişkileri -> Edgar Frank "Ted" Codd “A Relational Model of Data for Large Shared Data Banks”, Larry Ellison “Oracle” Objeler ve ilişkiler üzerinde işlem yapmayı sağlayan operatörler -> SQL Veri bütünlüğünü sağlayan yöntemler 3 23 Mart 13 Cumartesi Büyük Balıklar 4 23 Mart 13 Cumartesi RDBMS Pastası IBM Oracle Microsoft Other 5 23 Mart 13 Cumartesi Açık Kaynak Alternatifler 6 23 Mart 13 Cumartesi Neden başka bir veritabanı ? Yeni başlayan her projede ilişkisel veritabanı tercih ediliyor ??? 7 23 Mart 13 Cumartesi EES - Eşzamanlılık Veri üstünde aynı anda yapılan işlemler Koordinasyon gerekiyor. Veri kaybı riski var. 8 23 Mart 13 Cumartesi EES - Entegrasyon Farklı uygulamalar birbirleriyle iletişime geçmek istiyor. Aynı veritabanı üzerinde birden fazla uygulama işlem yapabilir. Enterprise Integration Patterns : [Hohpe ve Woolf] 9 23 Mart 13 Cumartesi EES - Standartlaşma SQL sürümleri birbirine benziyor. Öğrenmek çok kolay. Birinden diğerine geçmek kolay. 10 23 Mart 13 Cumartesi Veri Modeli-Nesne Tasarımı Nesne modeli ile veri tabanındaki veri modelini birleştirmek gerekiyor. Birindeki değişiklik diğerini etkiliyor. Eşleme yöntemleri devreye giriyor. ◦ iBatis ◦ Hibernate 11 23 Mart 13 Cumartesi Kullanım Modeli -RDBMS 12 23 Mart 13 Cumartesi Big Data Sosyal ağlar Internete bağlanan cihazlardaki artış Bu veriler nereye depolanacak ? ◦ ◦ ◦ ◦ Büyük diskler Büyük birincil hafıza Çoklu işlem birimleri (CPU) Maliyet yükseliyor. 13 23 Mart 13 Cumartesi Bir uygulama - Bir veritabanı Her uygulamaya bir veritabanı. Web servisleriyle bağlıyoruz. JSON veya XML ile veriyi tanımlıyoruz. 14 23 Mart 13 Cumartesi Kullanım Modeli -NoSQL 15 23 Mart 13 Cumartesi Kullanım Modeli -NoSQL-SOA 16 23 Mart 13 Cumartesi Kümeleme Aksaklıklar ◦ Donanımdaki arızalar ◦ Donanıma kolayca ulaşamama problemi Kolay donanım (commodity) ◦ Ucuz ◦ Bozulduğunda yenisini takabilme imkanı 17 23 Mart 13 Cumartesi Kümeleme İlişkisel veribanları doğası gereği kümeler üzerinde çalışmaya elverişli değiller. Paylaşımlı Disk Mimarileri ◦ Oracle RAC ◦ Microsoft SQL Server Tek noktadan arıza ◦ Paylaşımlı disk mimarisi çöktüğü zaman 18 23 Mart 13 Cumartesi Sharding Birden çok ilişkisel veritabanı sunucusu veri kümesinin alt kümelerini tutar. ◦ Uygulama alt kümelerin hangisinde işlem yapılacağını tayin ederek veriye ulaşır. 19 23 Mart 13 Cumartesi Google ve Amazon Maliyetlerin artması Arızalardaki geçişlerin uzun sürmesi Kümelemedeki fonksiyonel yetersizliklerden dolayı Veri depolama için yeni arayışlar başladı... BigTable - Google Dynamo - Amazon 20 23 Mart 13 Cumartesi NoSQL’in Farkları SQL kullanmıyor. Teknolojik anlam ifade etmiyor, bir hareket ! 21 23 Mart 13 Cumartesi Hareketin Sonucu İlişkisel veritabanları dışındaki alternatifler günyüzüne çıktı. Entegrasyon veritabanlarından -> Uygulama veritabanlarına geçiş başladı. Kümeleme üzerinde çalışabilen veritabanlarına sahibiz. Açık kaynak 22 23 Mart 13 Cumartesi İlişkisel Veri Katmanları Uygulama Veri Modeli - ER diyagram Veritabanı Saklama Modeli - RDBMS Satırlar ve Sütunlar... 23 23 Mart 13 Cumartesi NoSQL Veri Katmanları Key-Value Document Column Family Graph Toplam Modeli (Aggregates) - KeyValue, Document, Column Family 24 23 Mart 13 Cumartesi Toplamlar “Birbirine bağlı nesnelerin bir arada tek bir nesne gibi değerlendirilmesi” 25 23 Mart 13 Cumartesi Kümeleme Modelleri Scale Up - Sunucu gücünü yükseltme Scale Out - Yeni sunuculara dağıtma Toplam (Aggregate) bu modele uygun. 26 23 Mart 13 Cumartesi Veri Dağıtımı Yöntemler; ◦ Replikasyon ve sharding Master-slave Peer to peer 27 23 Mart 13 Cumartesi Tek sunucu Hiçbir dağıtım stratejisi yok. Bütün işlemler tek makina üzerinde gerçekleşiyor. 28 23 Mart 13 Cumartesi Sharding Veriyi alt kümelere ayırıyoruz. Her alt küme ayrı bir sunucuda çalışıyor. Sharding önceden tasarlanmalı ! 29 23 Mart 13 Cumartesi Master-Slave Replikasyon Master’dakiler Slave’e yazılır. Okuma çok yapılıyorsa bu işe yarar. Yazması çok olan uygulamalarda ağır bir yük oluşturur, tavsiye edilmez. Master çökerse, Slave’lerden okuma devam eder. Slave’ler master olabilir. Read-write uyumsuzluğu olabilir !!! 30 23 Mart 13 Cumartesi Peer2Peer Replikasyon Her node read-write yapabilir. Node’lar write operasyonlarını birbirleriyle paylaşırlar. Master-slave’de olduğu gibi read-write ve en önemlisi write-write uyumsuzluğu başgösterebilir. 31 23 Mart 13 Cumartesi Geçiş için Programcının üretkenliğini artırıyor. Veriye erişim performansını artırıyor. Servis odaklı mimariye geçişi hızlandırır. 32 23 Mart 13 Cumartesi Key-Value ne zaman ? Kullanım Durumları: ◦ Oturum Bilgilerinin Tutulması ◦ Kullanıcı profil bilgilerinin tutulması ◦ Alışveriş kartı bilgilerinin tutulması Önerilmeyen Durumlar: ◦ İlişkiler fazlaysa ◦ Transaction durumları ◦ Key dışında Value ile aramalarda ◦ Çoklu anahtarlarla aramalarda 33 23 Mart 13 Cumartesi Document Stores ne zaman ? Kullanım Durumları: ◦ Loglama ◦ İçerik yönetim sistemleri, blog platformları ◦ Analitik platformları ◦ E-ticaret siteleri Önerilmeyen Durumlar: ◦ Kompleks transactionlar ◦ Tasarım çok değişiyorsa 34 23 Mart 13 Cumartesi Column-Family ne zaman ? Kullanım Durumları: ◦ Loglama ◦ İçerik yönetim sistemleri, blog platformları ◦ Web sitesi analitik uygulamaları ◦ E-ticaret siteleri Önerilmeyen Durumlar: ◦ Hesaplamalar (SUM, AVG) ◦ Tasarım çok değişiyorsa 35 23 Mart 13 Cumartesi Graph ne zaman ? Kullanım Durumları: ◦ Sosyal ağ siteleri ve buna benzer platformlar ◦ Lokasyon tabanlı servisler ◦ Öneri sistemleri Önerilmeyen Durumlar: ◦ Bulk operasyonların fazla olduğu durumlar. 36 23 Mart 13 Cumartesi Veri Nasıl Saklanıyor ? Hızlı, Boyutu küçük - Birincil Hafıza ◦ RAM Yavaş, Boyutu büyük - İkincil Hafıza ◦ Hard disk 37 23 Mart 13 Cumartesi Veri Depolama 1990’da 1.5GB kapasiteye sahip bir sabit disk ile saniyede 4.4MB bilgi okunabiliyordu. 5.5 dk’da tüm disk okunabiliyor. 2012’de 1.5TB kapasiteye sahip bir sabit disk ile saniyede 100MB bilgi okunabiliyor. 250 dk’da tüm disk okunabiliyor. 1.5 GB => 0.25 dk’da okunabiliyor ! 38 23 Mart 13 Cumartesi Veri Depolama Diske Yazmak Diskten Okumaktan daha yavaş! Peki bunu hızlandırmak için ne yapmalıyız. ? ◦ Verileri paralel şekilde okuyabiliriz. Örneğin elimizde 100 disk olsun. Her diske verinin 100’de birini yazarız. 100 diski paralel olarak birlikte okuruz. Böylece tüm veriyi yaklaşık 2.5dk ‘dan az bir zamanda okumuş oluruz. 39 23 Mart 13 Cumartesi Bunları Bilmek Lazım! Hacim – Veri hacmi (Örn: 1 MB’lık bloklar) Hız – Verinin akış hızı birim zamanda bize işlememiz gereken veri. (Örn : Saniyede 100 mesaj) Çeşitlilik – Log, XML, Yapısal olmayan veri tipleri... 40 23 Mart 13 Cumartesi Sonuç ? Farklı senaryolar için yenilikçi özelliklere sahip veritabanları kullanılabilir... 41 23 Mart 13 Cumartesi NoSQL ◦Sakla ◦İşle ◦Analiz 42 23 Mart 13 Cumartesi Yapılan Hata ! Her türlü veri tipi için sadece SQL veya NoSQL kullanmak !!! SQL veya NoSQL birlikte kullanılmalı ! ◦ Elimizdeki verinin karakteristiğini bilmeliyiz, hangi DB tipinde tutulacağına karar verilmeli. ◦ SQL ve NoSQL’in kullanıldığı ekosistemler oluşturulmalı. 43 23 Mart 13 Cumartesi Veya SQL’in tüm özellikleri kullanılmalı ! ◦ Eğer performans arttırmak için “denormalizasyon” ve bunun gibi RDBMS özellikleri kullanılmasına rağmen performans artmıyorsa NoSQL düşünülmeli. 44 23 Mart 13 Cumartesi Yöntem Karar vermeden önce -> Verini incele !!! 1. Veri tipini incele, karakteristiğini öğren ! (Log, gerçek zamanlı veriler, lokasyon bilgileri, web sayfaları) 2. Ne sıklıkla veriye ulaşıyorsun ? 3. Veri tipi hangi sıklıklı değişiyor ? 45 23 Mart 13 Cumartesi Nasıl bir seçim ? Verinin Karakteristiği NoSQL SQL Dinamik, şema değişiyor X Statik, şema değişmiyor X Veri miktarı çok fazla, şema değişmiyor X Gerçek zamanlı veriler geliyor X Veri miktarı çok fazla, statik, şema değişmiyor, gerçek zamanlı değil X Güncellenme ve okuma X fazlaysa 46 23 Mart 13 Cumartesi NoSQL Tipleri 1. 2. 3. 4. Document Stores Derinin kütüğü => İsim:“Derin", Adres:“Kavaklıdere", Hobi:“oyuncak". Key-Value Store cocuk[‘Derin’] = {‘ilkisim’:’Derin’, ‘Adres’:’Kavaklıdere’, ‘Hobi’:’oyuncak’} Column Stores – Tabular Data Graph 47 23 Mart 13 Cumartesi MongoDB “Document Store” C++’da geliştiriliyor SQL sorgularına benzer bir sorgulama altyapısı var. Lisansı AGPL Master/slave replikasyonu destekliyor (otomatik failover geçişi sağlıyor) Otomatik Sharding desteği var. Sorguları JavaScript’te yazılıyor. Özellikler yerine performans’ı ön plana çıkarmışlar. 32bit sistemlerde, 3gb hafıza kullanımı sınırı var. Boş veritabanı dosyası 192 MB tutuyor. Coğrafi bilgi sistemleri için desteği mevcut. Ne zaman kullanılmalı ?: Dinamik sorguların olduğu, SQL’e benzer indeksleme mekanizmalarını kullanmak istediğinizde veya büyük bir DB’de iyi bir performans beklediğinizde. Örnek olarak: MySQL veya PostgreSQL kullanıyorsanız, şemanız dinamikse. 48 23 Mart 13 Cumartesi MongoDB Veri Tipleri Table eşittir Collection post = {“yazar”:”Bugra”, “text”:”Blog post”, “date” : datetime.datetime.utcnow() } posts = db.posts posts.insert(post) posts.find_one({“yazar”:”Bugra”}) 23 Mart 13 Cumartesi MongoDB Kullanım Durumları + Arşivleme, durum loglama + Doküman yönetim sistemleri + Uygulamada JSON kullanıyorsanız uygun olabilir. + Online oyunlarda küçük read/write’ların sık olduğu durumlarda. - Karmaşık transaction yapılarında. 23 Mart 13 Cumartesi MongoDB Python Sürücüleri PyMongo - http://api.mongodb.org/python/ current/installation.html 23 Mart 13 Cumartesi CouchDB “Document Store” Erlang programlama dili ile geliştiriliyor. Kolay kullanım ve veri bütünlüğü önemliyse. Apache lisansına sahip HTTP ve REST arayüzleriyle DB operasyonları gerçekleştirilebiliyor. master-master replikasyon yapabiliyor. Yazma operasyonları sırasında Okuma yapabiliyor Veriyi sürüm sistemlerinde olduğu gibi sürümlendirebiliyor. Geçmiş verilere ulaşmak mümkün ! jQuery ile DB sorgulamak mümkün. Ne zaman kullanılmalı ? : Bir verinin geçmiş sürümleri de sizin için önemliyse, master/master replikasyon yapabilmek istiyorsanız 52 23 Mart 13 Cumartesi CouchDB Kullanım Durumları HTTP/Rest arayüzü üzerinden bilgileri sunmak, veriler üstünde işlem yapmak için Veri bütünlüğüne önem verdiğiniz durumlarda. 23 Mart 13 Cumartesi CouchDB Python Sürücüleri Couchdb-python http://code.google.com/p/ couchdb-python/ 23 Mart 13 Cumartesi Riak “Key-value” Erlang programlama dilinde geliştiriliyor. Fault tolerance’a açık bir sistem. Apache lisansına sahip HTTP ve REST ile DB işlemleri gerçekleştirilebiliyor. Verinin dağıtımı ve kümelendirme seçeneklerini belirlemek çok basit. Map/reduce algoritmasını veri kümenizde çalıştırabiliyorsunuz. Full-text arama, indeksleme, sorgulama mevcut. (Riak Search Sunucusu ) 55 23 Mart 13 Cumartesi Riak Kullanım Durumları Yüksek bulunabilirlik Hatayı kaldırır Genişleyebilir Operasyon dostu Düşük gecikme 23 Mart 13 Cumartesi Riak Python Sürücüleri Riak-python-client https://github.com/ basho/riak-python-client 23 Mart 13 Cumartesi Redis Key-value store Tüm veritabanı RAM’de tutuluyor. Bu yüzden verilere erişim çok hızlı. Basit bir datastore fakat basitliği, kullanım kolaylığı, performansı küçük uygulamalar için vazgeçilmez. 58 23 Mart 13 Cumartesi Redis Kullanım Durumları Kullanıcı bilgilerini tutmak Hızlı bir şekilde saklamak ve sorgulamak istediğiniz her veritipi için kullanılabilir. Arama motoru oluşturmak için ◦ Riak-Search http://wiki.basho.com/Riak-Search.html 23 Mart 13 Cumartesi Redis Python Sürücüleri redis-py https://github.com/andymccurdy/ redis-py 23 Mart 13 Cumartesi Cassandra Dağıtık key-value store, semi column-oriented Java’da yazılıyor BigTable ve Dynamo teknolojilerini içinde barındırıyor. Apache lisansına sahip Thrift mesajlaşma altyapısını kullanıyor. Verinin replikasyonu ve dağıtımı için “trade-off” ayarlarına sahip. Kolona göre arama yapıyor. Yazmak okumaktan daha hızlı ! Apache Hadoop ile birleştirilebiliyor (MapReduce ) 23 Mart 13 Cumartesi Cassandra Kullanım Bankalar Finans kurumları Gerçek zamanlı veri analizi yapmak için. Yazmak / Okumaktan daha hızlı ! 23 Mart 13 Cumartesi Cassandra Python Sürücüleri Pycassa - http://pycassa.github.com/ pycassa/ 23 Mart 13 Cumartesi Neo4J Graph Database GPLv3 veya AGPL lisansıyla dağıtılıyor. Java’da yazılıyor. Nesneler arasındaki ilişkiler yoluyla veriyi ifade edebiliyor. 23 Mart 13 Cumartesi Neo4J Kullanım Durumları Nesneler arasındaki ilişkilerin yoğun olduğu durumlarda. İnsan takip uygulamalarında ◦ “Buğra Çakır’ın 03/04/2012 tarihinde Kızılay Metrosuna girdiği anda Buğra Çakır’ın arkadaş listesindeki kişilerden hangileri onun 100m yarıçapında bulunuyordu” 23 Mart 13 Cumartesi Neo4J Python Sürücüleri python-embedded https://github.com/neo4j/ python-embedded 23 Mart 13 Cumartesi HBase Bigtable tipi veritabanı Apache Lisansıyla dağıtılıyor. Java’da yazılıyor. Güvenilir read/write desteği var. Tabloların sharding işlemi otomatik olarak yapılabiliyor. Thrift ve HTTP arayüzleriyle veriye ulaşmak, üzerinde işlem yapmak mümkün 23 Mart 13 Cumartesi HBase Kullanım Durumları Gerçekten çok veriniz varsa Bir kaç değil 10’larca sunucu kullanıyorsanız. Rastgele, gerçek zamanlı read/write durumlarında 23 Mart 13 Cumartesi HBase Python Sürücüleri Thrift üzerinden erişilebiliyor. ◦ http://wiki.apache.org/hadoop/Hbase/ThriftApi 23 Mart 13 Cumartesi Performans 20.000 Wikipedia sayfasının indekslendiği bir performans testbed’inde Riak-MongoDB-Cassandra-HBase performanslarını karşılaştıralım. 23 Mart 13 Cumartesi Performans 23 Mart 13 Cumartesi Performans 23 Mart 13 Cumartesi Performans DB read/update Performansı MapReduce Performansı Cassandra İyi Çok İyi Hbase Kötü Ortalama MongoDB İyi Zayıf Riak Zayıf Ortalama 23 Mart 13 Cumartesi Sharding Verilerin hangi makinaya yazılacağını ve nereden okunacağını kendimizin belirlediği yönteme Sharding adı verilir. En popüler algoritmalardan birisi Consistent Hashing’dir. 74 23 Mart 13 Cumartesi Sharding A 0,1,2,3 B 4,5,6,7 C 8,9,a,b D c,d,e,f Hash 71db329b58378c8fa8876f0ec04c72e5 -> node B’ye eşleniyor. Okuma/Yazma/Silme/Değiştirme B nodunda gerçekleşecek. 75 23 Mart 13 Cumartesi Redis Performans Redis Anahtar Sayısı : 6633751 Kullanılan Hafıza : 1GB Kullanılan Backend Dosya : 230 MB ‘0’ dan Ayağa Kalkma Zamanı : 10sn Anahtar Arama Zamanı(Key/Value Perf): 0 ms 76 23 Mart 13 Cumartesi Grid Hesaplama MPI üzerinden hesaplama yapılıyor. “Shared filesystem” mimarisi “Network Bandwidth” Grid mimarisindeki performansı doğrudan etkileyen bir elemandır. 77 23 Mart 13 Cumartesi İhtiyaç ? İhtiyacımız olan; ◦ 1. Verinin güvenilir bir şekilde depolanması. ◦ 2. Depolanan verinin üzerinde analiz işlemlerinin gerçekleştirilmesi. 78 23 Mart 13 Cumartesi Apache Nutch - Lucene Doug Cutting – Apache Lucene – Metin arama kütüphanesi Apache Nutch – Açık kaynak web crawling, “arama” kütüphanesi 79 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Doug Cutting’in tahmini : ◦ 1 milyar sayfa – index’e sahip bir arama motorunun donanım için 0.5 milyon dolara ihtiyacı var. ◦ Aylık işletme maliyeti tahminen 30.000 dolar. 80 23 Mart 13 Cumartesi Apache Nutch 2002 yılında – web crawling yapmak için oluşturulan bir proje. Milyonlarca web sitesi indekslenebiliyor. Fakat “Milyarlar” çalışmıyor ! Bunun için ◦ NDFS ( Nutch Distributed File System ) 81 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Sayfa veritabanı – CrawlDB ◦ ◦ ◦ ◦ En son güncellenme zamanı Güncellenme aralığı Sayfa içeriği İçerik doğrulaması 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Çekilecek Sayfa Listesi – FetchList Gazete sayfaları ◦ ◦ ◦ ◦ http://www.hurriyet.com.tr http://www.milliyet.com.tr http://www.sabah.com.tr http://www.sozcu.com.tr 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Ham sayfa verileri – PageContent ◦ FetchList’deki sayfalardan çekilmiş bilgilerin bulunduğu veritabanıdır. ◦ Bu bilgiler ham olarak durmaktadır. Üzerinde bir işlem yapılmaz. 23 Mart 13 Cumartesi Arama Motoru Yapmak ? İşlenmiş sayfa verileri - ParsedPageContent ◦ Ham verilerin belli kodeklerle işlenmiş hallerinin bulunduğu veritabanıdır. Bu kodeklerle örneğin HTML, PDF, Open Office, Microsoft Office, RSS ve diğer formatlardaki bilgileri çözümlemek mümkündür. 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Bağlantı veritabanı – LinkGraph ◦ PageRank ile bir web sitesine kaç tane link olduğunu gösteren veritabanıdır. 23 Mart 13 Cumartesi Arama Motoru Yapmak ? Arama Fihristi – FullTextSearchIndex ◦ Çekilen web sitesi içeriklerinden oluşturulan klasik aramanın gerçekleştirilmesini sağlayan veritabanıdır. ◦ Apache Lucene ile oluşturulur. 23 Mart 13 Cumartesi Apache Nutch Google GFS (Google File System) Google MapReduce 2006’da Nutch’daki NDFS algoritmaları Lucene alt projesinden ayrılıp yeni bir kök projesi olan Hadoop’u oluşturdu. Doug Cutting Yahoo’ya katıldı. 2008’de 10.000 Hadoop core cluster ile Yahoo’nun production search index altyapısı tanıtıldı. 88 23 Mart 13 Cumartesi Apache Hadoop NDFS -> HDFS ( Hadoop File System ) 2008’de Hadoop’un kullanıldığı alanlar çeşitlendi. ◦ Last.fm ◦ Facebook ◦ New York Times 89 23 Mart 13 Cumartesi Soy ağacı 90 23 Mart 13 Cumartesi Ekosistem 1. 2. 3. 4. 5. Herşey nasıl başladı ? Veri miktarı arttı. Apache Nutch ile web crawling yaptık. Büyük verileri kaydettik. HDFS doğdu ! Bu verileri nasıl kullanacağız ? MapReduce algoritması ile analitik uygulamalar geliştirip, çalıştırdık – java, python gibi dillerle. 6. Yapısal olmayan verileri ne yapacağız ? – Web logs, Click streams, Apache logs, Server logs – fuse,webdav, chukwa, flume, Scribe 7. Hiho ve sqoop’u bu verileri HDFS’e aktarmak için kullacağız – RDBMS’den bilgileri alabiliyoruz ! 8. MapReduce programlayabilmek için yüksek seviyede diller tanımlandı– Pig, Hive, Jaql 9. BI araçları türedi, raporlama, Intellicus 10 . Yüksek seviye diller için akış kontrol araçları tanımlandı. - oozie 11. Hadoop işlerinin kontrolü için Hive, HDFS’i görüntülemek için Hue, karmasphere, eclipse plugin, cacti, ganglia 12. Yardımcı çatılar geliştirildi. Avro (Serialization), Zookeeper (Koordinasyon) 13. Daha yüksek seviyede işlemler için Yapay Öğrenme Mahout, Yeni bir mapreduce tekniği Elastic map Reduce 14. OLTP – HBase 91 23 Mart 13 Cumartesi BigData Ekosistemi 92 23 Mart 13 Cumartesi Hadoop Ekosistem Ambari Deployment, konfigürasyon ve izleme Flume Log ve event verilerinin toplanması HBase Column-oriented DB HDFS Hadoop’un kullandığı dağıtık dosya sistemi Hive SQL-benzeri sorgulanabilen bir datawarehouse MapReduce Kümeler üstünde paralel hesaplamayı sağlayan algoritma Pig Hadoop MapReduce hesaplamaları için üst düzey bir dil Oozie Orkestrasyon ve workflow aracı Sqoop RDBMS’lerden verileri almaya yarayan araç Whirr Cloud deployment’larını sağlayan araç ZookeeperKüme üyelerinin koordinasyonu ve konfigürasyonu için kullanılan araç 93 23 Mart 13 Cumartesi Hadoop Ekosistem Gelen Veriler: Sqoop, Flume Koordinasyon ve Akış: Zookeeper, Oozie Yönetim ve Dağıtım: Ambari, Whirr 94 23 Mart 13 Cumartesi Apache Sqoop SQL’den bilgileri alıp Hadoop ekosistemine aktarmayı kolaylaştırır. Hadoop ekosisteminden SQL’e bilgileri aktarmayı kolaylaştırır. 23 Mart 13 Cumartesi Apache Sqoop 23 Mart 13 Cumartesi Apache Flume Hadoop dışındaki veri kümelerini ekosisteme aktarmayı sağlar. Akış bazlı bir mimariye sahiptir. 23 Mart 13 Cumartesi Apache Flume 23 Mart 13 Cumartesi Apache Oozie Hadoop işlerinin (jobs) yönetimini sağlar. İşlerin akış şemalarında işlemesini sağlar. 23 Mart 13 Cumartesi Apache Oozie 23 Mart 13 Cumartesi Apache Zookeper Hadoop ekosistem elemanlarının dağıtık konfigürasyonunu, işlevsel kontrolünü, birlikte çalışabilirliğini sağlar. 23 Mart 13 Cumartesi Apache Pig Hadoop MapReduce hesaplamaları için yüksek seviyede bir dil arayüzü tanımlar. raw = LOAD 'excite.log' USING PigStorage('\t') AS (user, time, query); clean1 = FILTER raw BY org.apache.pig.tutorial.NonURLDetector(query ); uniq_frequency3 = FOREACH uniq_frequency2 GENERATE $1 as hour, $0 as ngram, $2 as score, $3 as count, $4 as mean; 23 Mart 13 Cumartesi Apache Hive Hadoop için veri ambarı uygulamasıdır. Büyük veriler üzerinde analiz işlemleri yapmayı sağlar. hive> CREATE TABLE pokes (foo INT, bar STRING); hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING); ALTER TABLE pokes ADD COLUMNS (new_col INT); 23 Mart 13 Cumartesi Apache Hive hive> LOAD DATA LOCAL INPATH './ examples/files/kv1.txt' OVERWRITE INTO TABLE pokes; hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15'; 23 Mart 13 Cumartesi Hadoop Dağıtımları Cloudera – CDH Dağıtımı ◦ Hadoop, Hive, Pig, Hbase, Zookeeper, Flume ,Sqoop, Mahout, Whirr, Oozie, Fuse-DFS, Hue Hortonworks ◦ Hadoop, Hive, Pig, Hbase, Zookeeper, Ambari, Hcatalog IBM ◦ Hive, Oozie, Pig, Zookeeper, Avro, Flume, HBase, Lucene Microsoft ◦ Hive, Pig 105 23 Mart 13 Cumartesi MapReduce Veri işlemek için kullanılan bir yöntem algoritmadır. Büyük veri setlerinin paralel olarak işlenmesinde kullanılır. Verileri liste şeklinde düşündüğümüz zaman bunlar üzerinde fonsiyonel dillerdeki gibi işlem yapmamızı sağlar. 106 23 Mart 13 Cumartesi MapReduce / Hadoop 23 Mart 13 Cumartesi Teşekkürler ! 23 Mart 13 Cumartesi