MapReduce Nedir?

13 Eylül 2011 Salı 04:03 Gönderen Merve Yüzbaşıoğlu 1 yorum
Günümüzün en popüler arama motoru elbette Google fakat bu popülerlik Google bu performansı nasıl sağlıyor sorusunuda beraberinde getiriyor. Herkes internetteki bilgileri depolayabilir ama bunu iyi bi performansta yapabilmek, elindeki bilgisayarlara iş yükünü doğru şekilde dağıtabilmekten geçiyor. Bilgisayarlar arasındaki iş yükünü dağıtma işini Google kendi geliştirdiği MapReduce denilen bir yazılım platformu ile gerçekleştiriyor.

MapReduce; büyük veri setleri ile yapılacak işlemlerin birden fazla iş birimine dağıtılmasını sağlayan yöntemdir. Burada büyük veri setleri derken birkaç bilgisayarın bile işleyemeyeceği kadar verinin topladığı setlerden bahsediyorum. Bu setler üzerindeki işlemler serisi çeşitli birimlere dağıtılıyor ve sonra çıktıları birleştirilip sonuç üretiliyor. İki katmandan oluşuyor Map, Reduce.
Map katmanı; İsim-değer çiftlerini girdi olarak alır, yapılacak işlemi gerçekleştirir. Ürettiği sonuç listesini ise girdideki isim ile birlikte çıktı olarak verir.
Reduce katmanı: Map katmanındaki sonuç listelerini toplar ve tek sonuca indirgeme işlemini yapar. Birde fazla iş birimi map işiyle uğraşırken, bir sonraki karman sonuçları toplayıp tek sonuç haline getirir.

Bu sistemin performanslı olması dışındaki bir diğer getirisi ise iş birimlerinden herhangi biri arızalandığında diğerleri çalışmaya devam eder ve arızalanan iş birimindeki görev başka bir iş birimine devredilir. MapReduce kavramını araştırıken Hadoop ismini epeyce gördüm ve bu kavramı anlayabilmek içinde araştırılabilir.

Hadoop Nedir?

Hadoop, google dosya sistemi teknolojisi olan MapReduce algoritmasinı birçok bilgisayara dağıtarak uygulamamızı sağlayan, Java ile yazılmış Açık kaynaklı bir yazılım. Hadoop yatay olarak ölçeklenebilen bir teknoloji bu sebeple kümedeki her makina kendi verisine sahip.

Hadoop'un kullandığı MapReduce tekniğini daha iyi anlamak için karşılaştığım şu örneği verebilirim;

Elimizde büyük bir dosyanın ve bu dosyanın her satırında bir mevye ismi ve yanlarındada o meyve satın alındığında ne kadar para ödendiği yazsın. Amacımız her meyve için toplam ne kadar para harcandığını bulmak. (Aşağıda küçük bir dosyadan örnek veriyorum ama bunun tek tek bakılamayacak kadar büyük bir veri olduğunu düşünelim..)

armut 10
portakal 3
incir 9
armut 9
armut 10
incir 3
mandalina 2
incir 29

Burada Anahtar değer meyve isimleri olacak ve diyelim ki Hadoop kümemizde iki iş birimimiz var. Üstteki dosyayı Hadoop'a verdik ve Hadoop bize bu dosyayı iki birime dağıtacaktır. Anahtar değerine bakmadan dağıtacak ve diyelim ki tam ortadan ikiye bölerek dağıttı.

armut 10
portakal 3
incir 9
armut 9
___________
armut 10
incir 3
mandalina 2
incir 29

Her bölüm kendi eşleme(map) işlemini yaparken benzer anahtar değerlerini aynı toplama yazacak.
Bölüm-1: armut=19, portakal=3, incir=9
Bölüm-2: armut=10, incir=32, mandalina=2
Her bölümün kendi işlemi sona erdikten sonra ingirgeme(reduce) işlemi yapılıyor ve her bölümdeki anahtarlar birde kendi aralarında toplanıyor. Bunun sonucunda;
Armut=29, incir=41, portakal=3, mandalina=2 Bu en son sonuç oluyor.

Hadoop kullanılarak yapılmış birkaç işe bakarsak;
  • Facebook Hadoop kullanarak kullancı davranışlarının analizini yapmakta ve sosyal reklamların etkisini ölçmektedir.
  • New York Times bilgi işlem ekibi Hadoop kullanrak 150 yıllık arşivlerindeki 11 milyon makaleyi dijitalleştirmiş ve aranabilir hale getirmiş.
İşin güzel yanı çok fazla zaman alabilecek işlemlerin dağtılarak yüksek performansta, kısa sürede yapılıyor olabilmesi:)

Kaynaklar

UTF-8 (Unicode Translate Format-8)

12 Eylül 2011 Pazartesi 06:56 Gönderen Merve Yüzbaşıoğlu 1 yorum
UTF-8 nedir sorusuna cevap vermeden önce Unix tarzı sistemlerde UTF8 kullanılmasının sebebinden başlamak istiyorum. UCS(Universal Character Set) ve Unicode, karakterlere karşılık integer sayıların atandığı kod tablolarının ilkiydi. Karakter dizilerinin ve bunların integer değerlerinin, byte'larla temsil edilmesiyle ilgili birçok alternatif var ve unicode metinlerin 2 yada 4 bytelık depolanması en bilinen kodlamalardan(UCS-2 ve UCS-4). Unix altında UCS-2 (yada UCS-4) kullanımı ciddi sorunlara yol açıyor. Unix araçların çoğu ASCII dosyalarını bekler ve önemli değişiklikler yapılmaksızın karakter olarak 16 bit kelimeleri okuyamaz. Bu gibi nedenlerden dolayı UCS-2 dosya isimleri, metin dosyaları, çevre değişkenleri vb.. yerlerde uygun bir kodlama değildir.

ISO 10646-1:2000 'de tanımlanan UTF-8 kodlamasında bu problemler yoktur. Açıkcası Unix tarzı işletim sistemleri altında Unicode kullanılmasını sağlamak için kullanılmıştır.
UTF-8'in Özellikleri

  • U+0000 dan U+007F (ASCII) USC karakterleri basi olarak 0x00 dan 0x7F olarak kodlanır. Bunun anlamı ise, 7 bit ASCII karakterleri içeren string ve dosyalar ASCII ve UTF-8'in her ikisinde de aynı kodlamaya sahiptir.
  • Bigendian UCS-4 byte stringlerinin sıralaması korunur.
  • 0xFE ve 0xFF byteları UTF-8 kodlamasında asla kullanılmaz.
  • ASCII olmayan bir karakteri temsil eden çokbyte'lı bir serinin ilk byte'ı daima 0xC0-0xFD aralığındadır ve bu karakter için takip eden kaç byte'ın olduğunu gösterir. Çokbyte'lı bir serideki tüm ilave bytelar ise 0x80-0xBF aralığındadır. Bu senkronizasyon kolaylığı sağlar ve eksik byte olmasına karşın sağlam ve durum bilgisiz kodlama sağlar.
  • UTF-8 ile kodlanmış karakterler teorik olarak 6 byte uzunluğunda olabilir, ancak 16-bit BMP karakterleri sadece 3 byte uzunluğundadır.
Aşağıdaki byte dizisi bir karakteri temsil etmek için kullanılır. Kullanılan dizi, karakterin Unicode sayıına göre değişir.

U-00000000 – U-0000007F:0xxxxxxx
U-00000080 – U-000007FF:110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF:1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


xxx ile yazılan kısımlar, karakter kod sayılarının ikili gösterimindeki bitlerle doldurulur. En sağdaki x bit, en az anlamlı bittir.

Örnek: Unicode karakteri U+00A9 = 1010 1001 bunu UTF-8 'e kodladığımızda;

11000010 10101001=0xC2 0xA9 olarak kodlanıyor.

Python programlama dilinde "şarkıcı" kelimesini utf-8 formatına dönüştürmek için;

>>> s="şarkıcı"
>>> u=unicode(s,"utf-8")
>>> utf8=u.encode("utf-8")
>>> utf8
'\xc5\x9fark\xc4\xb1c\xc4\xb1'

örneğin burada "ş" karakterinin utf-8 kodlaması: \xc5 \x9f şeklinde gösteriliyor.
Buradaki "şarkıcı" kelimesinin uzunluğuna baktığımızda ise

>>> s.__len__()
10

yanıtını alırız. Buradanda anlayacağımız gibi ş, ı karakterleri unicode da 2 bytelık karakter seti olarak ifade ediliyor ve ilk baktığımızda uzunluğunun 7 olduğunu düşündüğümüz kelimenin uzunluğu 10 oluyor.

Sonuç olarak UTF-8 Unicode karakterlerini 1-6 byte uzunluğunda diziler olarak kodluyor. ASCII'deki 0-127 arasındaki karakterler UTF-8 de kendi kodları ile kullanılıyor, diğerleri ise byte dizileri haline gelir. UTF kullanılarak 1 milyondan fazla karakter kodlanabiliyormuş:)

KAYNAK:



Enlightenment'dan ekran görüntüleri:)

10 Mayıs 2011 Salı 02:51 Gönderen Merve Yüzbaşıoğlu 3 yorum
Daha önce de enlightenment modülleriyle ilgili ekran görüntülerini paylaşmış hatta sizinde nasıl kullanabileceğinizi yazmıştım. O zamandan bu zamana enlightenmentın bir çok sorunu giderildi ve çok yakında çıkabilecek yeni isolarda sizde bunu görebilirsiniz. Henüz bir iso çıkmamışken süslediğim e17'den bir kaç ekran görüntüsü daha koyalım dedim. İlk açtığınızda bu şekilde bulamıcaksınız ancak kişisel Masaüstü'nüzü oluşturmak e17 araçlarıyla oldukça kolay:)








Pardus Geliştiricisi Olma Yolunda

9 Mayıs 2011 Pazartesi 13:25 Gönderen Merve Yüzbaşıoğlu 0 yorum
Henüz bir geliştirici olamasam da bu meşakatli ama zevkli yolculukta neler yaptığımdan bahsedeceğim. Projemiz başladıktan sonra, Necdet hoca: "Haydi hepiniz geliştirici başvurusu yapın ve kısa sürede burada çokça geliştirici olsun" deyince, bizde bu yolculuğa ilk adımımızı attık.

Geliştirici başvurusuyla ilgili hata kaydımı açtıktan sonra gönderilen 12 adet şirin mi şirin sorularımızı 10 gün içinde cevaplayıp gönderdim. Cevaplarımın kontrol edilmesinden sonra Junior job olarak işaretli bir hata çözerek bu yolda ilerlemem gerektiği söylendi ve ardından mentor olarak Serdar Dalgıç atandı. Bende tez zamanda hatalar arasından gözüme kestirdiğim bir paketi alıp uğraşmaya başladım. Yaklaşık 2 yıldır Necdet hocanın yanında çalıştığımdan dolayı elbette daha önceden paket yapmışlığım vardı:) Geliştirici başvurusu için yaptığım ilk paket guiqwt adındaki programdı. Bu paketin bağımlılığı olan guidata ve guidata'nın bağımlılığı olan h5py adında iki programı daha paketlemek zorunda kaldım.[1][2][3] Bu paketler review sürecindeyken ben junior job' ların arasından pepper [4] adlı programı seçtim ve bunu da paketledim. "Unused direct dependecy" ile ilgili sorunu da bugün çözdüm ve umarım kısa sürede bu pakette depoya girer. Bir hafta sonu eğlencesi olarak Pan [5] adlı programı da paketledim ve henüz Mentorumun gözden geçirmesini beklemekteyim.

Kalan işlerimde depoya girdikten sonra bakalım neler olacak:) Büyük bir hevesle "geliştirici oldun" denilmesini bekliyorum:) Geliştirici olduğum zaman tekrar yazacağım ve bu nedenle Teşekkür kısmını o güne saklamakta fayda var diye düşünüyorum:) Ayrıca taze geliştiricimiz Alper'i de tebrik ediyorum. Onun yolculuğunu merak ediyorsanız Alper'in blogunu ziyaret edebilirsiniz.

2. Geleneksel Çomü-Pardus Atölye Çalışması:)

9 Nisan 2011 Cumartesi 14:02 Gönderen Merve Yüzbaşıoğlu 0 yorum
Biraz Necdet Hocamızın dürtmesi biraz da geçtiğimiz Perşembe günü 2 günlük atölye Çalışması yapmak için Çanakkale'ye gelen Pardus ekibi(Gökmen Göksel, Onur Küçük, H.İbrahim Güngör, Mete Bilgin, Metin Akdere) ve Süpriz kişi(Burak Çalışkan) ile geçen çok verimli çalışmalarımızdan bahsetmek için bir blog yazısı şart oldu:)(Not: Bu cümlede çok uzun oldu.)

Peki Neler oldu ?

Öncelikle Gökmen Göksel, Kde bağımlılıklarından ayrılan yönetici ailesinin yamalarını gözden geçirdi ve gerekli düzenlemeleri yaptık hızlıca.

H.İbrahim Güngör ile E17 üzerine bir çalışma yapıldı. Ben yönetici ailesinden disk yöneticisi ile ilgilendiğimden bu tarafta pek yer alamadım. Oysa gönlüm hem o sevimli penguenler ile birlikteydi ;)

Onur Küçük, geriye kalan herşeye baktı denilebilir:) Hatta bize ders anlattı çok da iyi oldu(Daha uzun olmasını isterdik ama ekibin yola çıkma vakti geldiğinden kısa kesilmek zorunda kaldık.)

Mete ve Metin de Joker rolündeydiler:) Onlarla tekrar çalışma fırsatı bulmak çok güzel.

Burak Çalışkan'la elbette Gnome ile ilgili bir takım şeyler konuşuldu.(Burak gerçekten süpriz oldu.)

NOT: 3M den Meltem de gelicekti ama son anda çıkan işi nedeniyle gelemedi.(Keşke gelebilseydi.)

Tüm ekiple hem çook eğlenceli, hem çoook faydalı hem de yorucu 2 gün geçirdik. Çalışma sonrası yenilen yemekler de cabasıydı:) Ayrıca bu atölye sırasında hacker olma yolunda epey ilerleme kaydettim. Pek çok kişiyi hackledim. (Twitterdan yansımalarını görebilirsiniz) Artık Hacker şöhretim aldı başını gidiyor:P Sıradaki siz olabilirsiniz aman Dikkat!

Herşeyiyle çook güzeldi. Pardus ekibine çoooook Teşekkürler, Yine gelin:)


Not: ÇoMaK ekibindeki diğer arkadaşlarında bloglarını okumayı unutmayın:)

Pardus 2011 + Enlightenment [Dolly]

8 Mart 2011 Salı 12:30 Gönderen Merve Yüzbaşıoğlu 0 yorum
Modüller için Ekran Görüntüleri ;)

resim1: e-module-rain modülü ekran görüntüsü




resim2-3: e-module-penguins ve e-module-snow modülleri birlikte
resim4: e-module-snow modülü ekran görüntüsü

resim5: e-module-flame modülü ekran görüntüsü

ÇOMAK-Enlightenment[Dolly] Modülleri ;)

11:33 Gönderen Merve Yüzbaşıoğlu 0 yorum
Bugün çıkardığımız Pardus 2011 + Enlightenment [Dolly] alfa sürümünü biraz eğlenceli hale getirmek için sizlere birde bazı modüller paketledik:) Bu modülleri Enlightenment'ı kurduktan sonra depomuzu ekleyip , modülleri kurarak kullanabilirsiniz. Benim bu blogu yazmaktaki amacım ise bu modülleri nasıl kullanacağınız ve bu modüllerin kısaca ne olduğundan bahsetmek:)

Öncelikle depoda bulabileceğiniz modülleri sıralayalım;

e-module-moon - Ay saatini gösteren bir modüldür.
e-module-rain -
Masaüstünüze yağmur yağdırmak istiyorsanız aradığınız modül bu:)
e-module-snow -
Masaüstüne minik yılbaşı ağaçlarıyla birlikte kar yağdıran bir modül.
e-module-penguins -
İşte en sevilen modülümüz:) Masaüstünde gezen minik penguenlerden oluşan bir modül.
e-module-flame - Yakın zamanda bu modülde depoya girecek:) Ortaya alevli bir masaüstü çıkartmak için kullanılan modül.

http://x86-64.comu.edu.tr/dolly/ adresinden kuracağınız E17 üzerine bu modülleri yükledikten sonra;

Anamenü->Ayarlar->Modüller : Bunun sonucunda Modül Ayarları karşınıza çıkacaktır.

Modül Ayarlarından yukarıda bulunan "Look" sekmesi altında kurduğunuz modülleri görüp yükleyebilirsiniz:)

Tüm modüllerden farklı olarak e-module-moon modülünü çalıştırmak içinse biraz daha farklı bir yol izlemek gerekiyor.

Anamenü->Araçlar : Araç Yöneticisi karşınıza çıkacaktır. Burada listeden Ay modülünü seçip Araç ekle diyerek ay saatinizi masaüstüne ekleyebilirsiniz.

Not: Ayrıca biraz da eğlenmek için bir adet oyunumuz var bu sürümde (econcentration)

Depo eklemek için: E17 'de depo ekleyebilen bir kaptan bulacaksınız:)

Yeni E17 [Dolly] ve modülleriyle iyi eğlenceler :) Bir sonraki yazıda penguenler modülünü daha ayrıntılı anlatacağım. Modüllerle ilgili aklınıza takılan herşey için yorum yazmaktan çekinmeyin.