Hadoop üzerinde Mongo

Foursquare’de, veri altyapısının en önemli parçalarından biri canlıdaki Mongo veritabanının kopyasını Hadoop içerisine aktarmaktır. Bugün bu işin iki parçasını açık kaynak kodlu hale getiriyoruz, Mongo’nun Hadoop’a boşaltılma işlemi ve MapReduce birimlerinden gelen bu veriyi okuyan kod.

Neden Hadoop üzerinde Mongo?

Mongo veritabanımız Foursquare’deki her şeyin gerçeklik kaynağıdır. Kaç kullanıcımız var? Şu an kaç kişi Sabiha Gökçen’de check-in yapmış? Bu barda herhangi bir arkadaşın tarafından bırakılmış en beğenilen tavsiye ne? Mongoya sorun. Bununla birlikte, veritabanı her zaman okuma ve yazma için aşırı derecede duyarlı kalmalıdır. Kimse check-in’inin 10 dakika sonra gösterilmesini istemez! Bunun anlamı mongo üzerinde pahalı (Her kullanıcının ziyaret ettiği her mekana bakmak gibi) sorguları işletemeyeceğimizdir.

Hadoop da neymiş ?

Hadoop bol miktarda verisetleri üzerinden işlem yapmak için geliştirilmiş açık kaynak kodlu bir frameworktür. İki ana bileşeni vardır. Veriyi depolamak için, HDFS (Hadoop distributed file system – Hadoop dağıtık dosya sistemi). Ve O veri üzerinde işlem yürütmek için MapReduce. Foursquare’in verimerkezindeki Hadoop kümesi(Cluster) halihazırda 100 tane sunucu üzerinde yaklaşık 2.5 Petabytelık(Yaklaşık 2 milyon 600 küsür bin gigabyte veya yüksek çözünürlüklü yaklaşık 600.000 film veya 250 milyon tane yüksek çözünürlüklü fotoğraf… Bkz: Resimli anlatım) işlenmemiş veri vardır. İşletme ve ürün kararlarından, en şahane bazı özelliklerimize kadar(Yeni foursquare’deki gerçek zamanlı bildirimler gibi) burada yaptığımız her şeyin kaynağında Hadoop vardır.

Hadoop üzerinde Mongo verimizin olması, uygulamanın olduğu dünyadaki bakış açısının aynısını görüntülememizi sağlar. Canlıdaki veritabanına en ufak bir etkisi olmadan çok büyük sorular sormamıza izin verir.

Veriyi aktarmak

Aynı anda verimerkezimizde çalışan Mongo kopyaları ile başlar. Bu nodeların hepsi her bir mongo işleminin altında çalışan bağımsız LVM kümesidir(Her fiziksel SSD volume’u başına bir LVM kümesi). Her altı saatte bir her node’da çalışan bir işlem, mongo veritabanının çalıştığı veritabanına LVM’nin bellek kopyasını alma komutu gönderir. Merkezi bir koordinatör bütün kümeler arasında bu işlemin olabildiğince eş zamanlı olarak yürütüldüğünden emin olur. Bu işlem, kümenin “akla yatkın” bellek kopyasını yaratmış olur. Eğer bu parçaların farklı zamanlarda bellek görüntüsü alınmış olsaydı, başka bir kayıt ile ilişkisi olmayan yabancı anahtarlı(Foreign Key) kayıtlar oluşabilirdi. Bu bellek görüntüleri lokal olarak sıkıştırılır ve arşivlenir, daha sonra HDFS tarafından alınan bellek görüntüsü grubuna bağlı olarak belirli bir dizin’e upload edilir.

Ayrı bir işlem, küme tamamen oluşup erişilebilir olana kadar sürekli olarak bu dizini gözlemler(örn: kümenin içindeki her bir parça). Dosyalar bir çok sunucuda aynı anda  indirilip, genişletilip, çıkartılması tamamlanır. bağımsız dosyanın indirilmesi tamamlandığı zaman, veriyi tekrar HDFS’e yazman için mongodump programını çalıştırıyoruz. Bu veri MapReduce işlemleri için daha kolay işlenebilir formatta oluyor. Örneğin 2014-01-01 tarihine kadar olan bütün check-in verileri Mongonun BSON formatı ile tek dizin içerisinde depolanıyor:

/datasets/mongo/bson/ident=checkins/version=2014-01-01/col=checkins/

Veriyi okumak

Bütün Mongo veritabanının Hadoop üzerinde erişilebilir olması güzel bir şey tabi, ancak MapReduce işlemleri tarafından okunamadığı sürece pek bir faydası yok.  Hadoop tarafından okunan her Mongo koleksiyonu bir Thrift tanımı ile ilişkilendirilmiştir ve özelleştirilmiş bir giriş formatı BSON’u bir Thrift objesine dönüştürür.  Scalayı kullandığımızdan, Thrift objeleri Spindle‘ı kullanarak Scala kodlarını oluşturur.

Belirli gün içinde bütün küme bitirildiği zaman, Hadoop işlerine bildirmek için işaretçi bir dosya koyarız. Diğer bir işlem insanlara Hive sorguları yazabilmeleri için tamamen transparan olan  Hive tablolarımızın yeni veriyi gösterecek şekilde günceller.

Yazının orijinaline buradan ulaşabilirsiniz.

Barışcan Tunalı

Ege Üniversitesi Bilgisayar Mühendisliği mezunu, 1990 model, gezmeyi tozmayı sever, evde oturmak zor gelir. Naçizane uzmanlık alanı iş zekâsı ve veri madenciliğidir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir