22 Ekim 2014 Çarşamba

Hadoop - MapReduce (Classic) Job Çalışma Adımları

Hadoop da klasik MapReduce framework kullanılarak başlatılan job'larda, job submit edildiğinde bazı adımlar gerçekleşmekte ve bu adımların başarım durumlarına göre job işletilmeye başlanmaktadır:

  1. JobId alınır.
  2. Output dosyası mevcutmu kontrol edilir.
  3. Input dosyası mevcut mu kontrol edilir.
  4. Job için gerekli kaynak dosyaların (jar dosyası yada konfigürasyondosyaları gibi) düğümlere dağıtımı yapılır. Bu işlem yedekli olarak yapılır. Kaç tane yedeği olacağı "mapred.submit.replication" özelliğinde belirtilir. Bu değer varsayılan olarak 10 dur.
  5. Tum işlemler başarılı ise job  çalışmaya hazır olduğu belirtilir. 
Buraya kadar olan bölüm bir job'ın çalışmaya başlamadan önceki kontrol adımları şeklinde idi ve job'ın çalıştırıldığı istemci makinasında gerçekleşen adımlardı. Bundan sonra JobTracker sazı eline alır ve job ilklendirilir, çalışmaya başlatılır:
  1. Job'ın işleyeceği splitler incelenir.
  2. Her bir split adedince map task oluşturulur.
  3. Reduce sayısı ise job da tanımlı "mapre.reduce.tasks" özelliğinin değerine göre belirlenir ve bu sayıda reduce task oluşturulur. 
  4. Oluşturulan map ve reduce task'larına ID ataması yapılır.
  5. 1 adet job setup task oluşturulur. Bu task map task başlamadan önceki yapılacak işlemlerin tanımlanabileceği bir tasktır. Örneğin job başlamadan önce output dosyası burada oluşturulabilir.
  6. 1 adet job cleanup task oluşturulur. Bu task reduce task'lar tamamlandıktan sonra yapılacak işlemlerin tanımlanabileceği bir tasktır. Örneğin task bittikten sonra, oluşturulan geçici dosyalar burada silinebilir. 
  7. TakTrackerlar belirli aralıklar ile ayakta olduklarına dair jobTracker' a hearthbeat mesajı gönderirler (minimum 5 saniyede bir, büyük cluster'larda bu daha uzun bir süre). Bu mesaja ek olarak yeni bir task alabilmeye uygunluk durumlarınıda JobTracker'a bildirirler.
  8. Eğer tasktracker yeni bir task almaya müsait ise hearthbeat mesajının dönüş değeri olarak JobTracker TaskTracker'a yeni bir task atar. Hangi taskin öncelikli atanacağı belirlenirken scheduler olarak ne kullanıldığı gözönünde bulundurulur. Ek olarak JobTacker eğer tasktracker hem map hemde reduce task almaya musait ise, JobTracker tarafından öncelikle map task kapasitesi doldurulur ve daha sonra reduce task ataması yapılır. Atanacak map task seçilirken "data locality" prensibine dikkat edilir. Ancak reduce task için bu durum göz önünde bulundurulmaz.
Bu aşamaya kadar bir job için taskların oluşturulması ve düğümlere atanmasına kadar geldik. Bundan sonra taskların işletimi için sazı eline TaskTracker alacak:


  1. Tasktracker çalıştıracağı job' a ait jar dosyasını ve gerekli diğer dosyaları distributed cache den alıp tasktrackerın dosya sistemine kopyalar.
  2. Task için lokal bir çalışma alanı oluşturur ve jar dosyası içeriğini buraya un-jar eder.
  3. Task ı çalıştırabilmek için bir TaskRunner çalıştırır.
  4. TaskRunner yeni bir JVM ayağa kaldırır. (JVM tekrar kullanılabilir olarak ayarlama yapıldı ise tekrar ayağa kaldırılmaz. )
  5. Her task kendi JVM si içinde setup ve cleanup aksiyonlarını çalıştırabilir.
  6. Task çalışmaya başladığında statüsünü "progress" e çeker.
  7. TaskTracker hearthbeatler ile sürekli durumunu JobTracker'a bildirir. Task ile ilgili counterlar ise 5 saniyeden saha seyrek olarak JobTracker'a iletilir. Böylelikle durum izlenebilirliği sağlanır.
  8. JobTracker son task için de tamamlandı bilgisini aldıktan sonrajob ın durum bilgisini "success" olarak günceller.
  9. Job ile ilgili conterların ve istatistiklerin bilgileri konsola yazılır.
  10. JobTracker tamamlanan job ile ilgili cleanup işlemini yapar ve TaskTracker' ada aynı işlemi yapmalarını söyler. Böylelikle geçici olarak yazılan dosyalar gibi job a özel şeyler temizlenir.

Hiç yorum yok:

Yorum Gönder