2014-06-05 36 views

cevap

48

mapreduce.map.memory.mb, Hadoop'un bir mapper'e megabayt cinsinden ayrılmasına izin verdiği üst bellek sınırıdır.

Container[pid=container_1406552545451_0009_01_000002,containerID=container_234132_0001_01_000001] is running beyond physical memory limits. Current usage: 569.1 MB of 512 MB physical memory used; 970.1 MB of 1.0 GB virtual memory used. Killing container.

Hadoop harita oluşturucusu java süreçtir ve her Java süreç kendi yığın bellek maksimum ayırma ayarları üzerinden yapılandırılır vardır: Varsayılan bu sınır aşılırsa, Hadoop böyle bir hata ile mapper öldürecek 512. olduğunu mapred.map.child.java.opts (veya mapauce.map.java.opts in Hadoop 2+). mapper süreci yığın bellek tükenirse , mapper bellek istisnalar dışında bir java atar:

Error: java.lang.RuntimeException: java.lang.OutOfMemoryError

Böylece Hadoop ve Java'nın ayarları ilişkilidir. Hadoop ayarı, bir kaynak denetiminin/denetiminin daha fazlasıdır ve Java daha çok bir kaynak yapılandırmasıdır.

Java yığın ayarları, Java kodu için yedek belleğe gereksinim duyduğumuzdan, Hadoop konteyner bellek sınırından daha küçük olmalıdır. Genellikle kod için% 20 bellek ayırmanız önerilir. Bu yüzden eğer ayarlar doğruysa, Java tabanlı Hadoop görevleri Hadoop tarafından asla öldürmemelidir, bu yüzden yukarıdaki gibi "Öldürme kabı" hatasını görmemelisiniz.

Java bellek yetersizliği ile karşılaşırsanız, her iki bellek ayarını da artırmanız gerekir.

+0

Aradığım şey bu, teşekkürler kardeşim. – Judking

+0

Başka bir soru lütfen, 'mapreduce.map.memory.mb' tam olarak eşleme görevini çalıştıran kapsayıcı miktarı ne kadardır? – wuchang

42

Aşağıdaki özellikler, görevlerinizi yürüten JVM'lere geçirilecek seçenekleri belirtmenizi sağlar. Bunlar yığın kullanılabilir kontrol etmek için -Xmx ile kullanılabilir.

Hadoop 0.x, 1.x (deprecated)  Hadoop 2.x 
------------------------------- -------------------------- 
mapred.child.java.opts    
mapred.map.child.java.opts   mapreduce.map.java.opts 
mapred.reduce.child.java.opts  mapreduce.reduce.java.opts 

Bunlardan ilki için doğrudan Hadoop 2 eşdeğeri yoktur; Kaynak koddaki tavsiye diğer ikisini kullanmaktır. mapred.child.java.opts hala desteklenmektedir (ancak varsa diğer iki daha özel ayarlarla geçersiz kılınmıştır).

Hadoop 0.x, 1.x (deprecated)  Hadoop 2.x 
------------------------------- -------------------------- 
mapred.job.map.memory.mb   mapreduce.map.memory.mb 
mapred.job.reduce.memory.mb  mapreduce.reduce.memory.mb 

Ben -Xmx 75% ayarlamanızı öneririz: yığını ve sınıf tanımları da dahil olmak üzere yığın - Bunlara Tamamlayıcı

, sen toplam görevler için kullanılabilir bellek (muhtemelen sanal) sınırı izin Aşağıdaki memory.mb değerleri.

YARN kümesinde, işler sunucu tarafı yapılandırması yarn.scheduler.maximum-allocation-mb'dan daha fazla bellek kullanmamalı veya öldürülmelidir.

Bunların varsayılanlarını ve önceliklerini kontrol etmek için Hadoop kaynak kodunda JobConf ve MRJobConfig'a bakın.

Giderme

sizin mapred-site.xml dosyasını bu ayarlar için varsayılan sağlayabilir unutmayın. Bu kafa karıştırıcı olabilir - ör. eğer işiniz mapred.child.java.opts programsal olarak ayarlanmışsa, mapred-site.xml mapreduce.map.java.opts veya mapreduce.reduce.java.opts ayarlarını yaparsa bu durumun etkisi olmaz. Mapred-site.xml dosyasını geçersiz kılmak için bu özellikleri işinizde ayarlamanız gerekir. Hangi değerlerin uygulandığını ve nereden geldiklerini görmek için işinizin yapılandırma sayfasını kontrol edin ('xmx' ifadesini arayın). Bir İPLİK kümesinde

ApplicationMaster bellek

, kendi ApplicationMaster için kullanılabilir bellek miktarını kontrol etmek için aşağıdaki iki özelliklerini kullanabilirsiniz (giriş bölünme, görevlerin durum, vb ayrıntılarını tutmak için):

Hadoop 0.x, 1.x     Hadoop 2.x 
------------------------------- -------------------------- 
            yarn.app.mapreduce.am.command-opts 
            yarn.app.mapreduce.am.resource.mb 

Yine, resource.mb değerinin% 75 (eski olarak) -Xmx ayarlayabilirsiniz.

Diğer konfigürasyonlar

bellek sınırlarına ilişkin birçok diğer yapılandırmalar da vardır, bunların bazıları kullanımdan kaldırıldı - JobConf sınıfına bakın. Bir kullanışlı bir: Düşük değere (10) Eğer MapOutputCopier.shuffleInMemory bir OutOfMemoryError vurmak durumunda diskte gerçekleşmesi karıştır zorlamak için

Hadoop 0.x, 1.x (deprecated)  Hadoop 2.x 
------------------------------- -------------------------- 
mapred.job.reduce.total.mem.bytes mapreduce.reduce.memory.totalbytes 

Seti bu.

+0

Başka bir soru lütfen 'mapreduce.map.memory.mb' tam olarak eşleme görevini çalıştıran kapsayıcı miktarı ne kadardır? – wuchang

İlgili konular