Video: hadoop yarn architecture 2024
Bir MapReduce uygulaması bölü girişindeki verileri kayıt başına kayıt esasına göre işler ve her kaydın MapReduce tarafından bir anahtar / değer olduğu anlaşılır çifti. Giriş bölmeleri hesaplandıktan sonra, eşleme görevleri onları işleyişine başlayabilir - yani, Kaynak Yöneticisinin planlama tesisi onlara işleme kaynaklarını atadıktan hemen sonra. (Hadoop 1'de JobTracker, eşleyici görevlerini belirli işleme alanlarına atar.)
Eşleme görevinin kendisi, bir defada bir girdi ayrımını işler - şekilte, bu yalnız kayıt anahtar / değer çifti ile temsil edilir. Uçuş verilerimizde, giriş bölmeleri hesaplandığında (metin dosyaları için varsayılan dosya işleme yöntemi kullanılarak) metin dosyasındaki her satırın tek bir kayıt olduğu varsayılır.
Her kaydın satırın metni değeri temsil eder ve her satırın bölünmesinin başlangıcından itibaren bayt uzaklığı anahtarı kabul eder.
Neden bayt ofset yerine satır numarasının kullanılmadığını merak ediyor olabilirsiniz. Çok büyük bir metin dosyasının birçok veri bloğuna ayrıldığını ve çok sayıda bölme olarak işlendiğini düşündüğünüzde satır numarası riskli bir kavramdır.
Her bölüntüye ait satır sayısı değişkendir, bu nedenle işlenmekte olan satırdan önceki satır sayısını hesaplamak mümkün değildir. Bununla birlikte, bayt ofseti ile hassas olabilirsiniz, çünkü her bloğun sabit sayıda baytları vardır.
Eşleme görevi, her kaydı işlerken yeni bir anahtar / değer çifti üretir: Burada anahtar ve değer girdi çifti ile tamamen farklı olabilir. Eşleme görevinin çıktısı tüm bu anahtar / değer çiftlerinin tam koleksiyonudur.
Her harita görevinin son çıktı dosyası yazılmadan önce çıktı, tuşa dayalı olarak bölümlendirilir ve sıralanır. Bu bölümleme, her bir tuş için tüm değerlerin birlikte gruplandırılmış olması demektir.
Oldukça basit bir örnek uygulama söz konusu olduğunda yalnızca tek bir azaltıcı var, bu nedenle eşleme görevinin tüm çıktıları tek bir dosyaya yazılır. Fakat çoklu redüktörlü durumlarda, her haritalama görevinde birden çok çıktı dosyası da üretilebilir.
Bu çıkış dosyalarının dökümü bölümleme anahtarına dayanır. Örneğin, eşleme görevleri için yalnızca üç farklı bölme tuşu çıktısı varsa ve iş için üç redüktör yapılandırdıysanız, üç haritalayıcı çıktı dosyası olacaktır. Bu örnekte, belirli bir eşleme görevi bir girdi bölme işlemini gerçekleştirir ve ç anahtardan ikisini üretirse, yalnızca iki çıktı dosyası olacaktır.
Her zaman eşleme görevlerinin çıktı dosyalarını sıkıştırın. Daha küçük çıktı dosyalarının yazılması, mapper çıktısını, redüktörlerin çalıştığı düğümlere transfer etmenin kaçınılmaz maliyetini en aza indirgediğinden burada en büyük fayda performans kazanımlarıdır.
Varsayılan bölücü çoğu durumda yeterli değildir, ancak bazen verilerin redüktörler tarafından işlenmeden önce nasıl bölündüğünü özelleştirmek isteyebilirsiniz. Örneğin, sonuç kümelerindeki verilerin anahtara ve değerlerine göre sıralanmasını isteyebilirsiniz - ikincil türü.
Bunu yapmak için, varsayılan ayırıcıyı geçersiz kılabilir ve kendi ayırıcıyı uygulayabilirsiniz. Bununla birlikte, bu işlem biraz dikkat gerektirir; çünkü her bölümdeki kayıtların sayısının tekdüze olmasını sağlamak istersiniz. (Bir redüktör diğer redüktörlerden çok daha fazla veri işlemek zorunda kalırsa, tek işleve bağlı redüktör orantısız olarak büyük veri kümesi üzerinden kaymaya başlarken MapReduce işinizin bitmesini bekleyeceksiniz.)
Düzgün boyutlu ara dosyalar kullanarak, MapReduce işlemesinde mevcut olan paralellikten daha iyi yararlanabilir.