Harita/Küçült sırasında Hadoop'ta özel bir yapılandırma nesnesi ayarlayıp (daha sonra) almak için herhangi bir yol var mı? Örneğin, büyük bir dosyayı önceden işleyen ve dosyayla ilgili bazı özellikleri dinamik olarak belirleyen bir uygulama varsayalım. Ayrıca, bu özelliklerin özel bir Java nesnesine (örneğin, Properties
nesnesine, ancak yalnızca bazılarının dizgiler olmamasına rağmen) kaydedildiğini ve daha sonra her bir harita ve küçültme işi için gerekli olduğunu varsayalım.Hadoop'ta özel yapılandırma değerlerini yayma
Uygulama, bu yapılandırmayı "nasıl yayıyor", böylece her bir mapper ve redüktör işlevi gerektiğinde nasıl erişebilir?
bir yaklaşım, ikinci parametre üzerinden JSON
dize tefrika konfigürasyon nesnesini geçmesi, örneğin, JobConf
sınıfının set(String, String)
yöntemi kullanmak ve bağlı olabilir, ancak bu bir kesmek çok fazla olabilir ve bu durumda uygun JobConf
örneğin her bir Mapper
ve Reducer
tarafından erişilebilir olmalıdır (örneğin, earlier question'da önerilen gibi bir yaklaşımı izleyerek). Eğer M/R işinde gereken her özelliği içeren bir Properties
nesne varsa
Tüm özellikler dizgilerse, bu iyi olur. Benim kullanım durumunda, bazıları değil, onlar (oldukça karmaşık) hem harita hem de azaltılmış parçalar için gerekli olan özel Java nesneleridir. Ama cevap için +1 yine de. :-) – PNS
@PNS Dize olmayan bir nesneyi iletmek istiyorsanız, dizeleri Strings'e dönüştürmek için önce dizgelerinizi serileştirebilir ve bu dizeleri 'Yapılandırma'ya iletebilirsiniz, ardından mapper/redüktörde de serialize edilir. nesneler. Bunun gibi nesneleri geçmek için yerel bir yol olduğunu düşünmüyorum.Ayrıca, nesneyi bir dosyaya serileştirebilir ve HDFS'ye yerleştirebilir ve bu dosyayı muhtemelen 'DistributedCache' ile alabilirsiniz. –
Evet, MapReduce dağıtılmış bir uygulama olduğundan, serileştirme yine de gerekli görünüyor. – PNS