2013-06-18 26 views
5

Küçük (16M satır) ayrı bir tablo ve büyük (6B satır) eğik tablo arasında bir domuz birleşimi var. Düzenli birleştirme işlemi 2 saat sonra sona erer (bazı değişikliklerden sonra). using skewed'u denedik ve performansı 20 dakikaya kadar geliştirebildik. biz daha büyük bir çarpık tabloyu (19B satır) çalıştıklarındadomuz eğri büyük bir tabloyla birleşiyor "Bölünmüş meta veri boyutu 10000000 değerini aştı"

ANCAK, biz NUMUNE işi ​​bu mesajı alıyorum:

Split metadata size exceeded 10000000. Aborting job job_201305151351_21573 [ScriptRunner] 
at org.apache.hadoop.mapreduce.split.SplitMetaInfoReader.readSplitMetaInfo(SplitMetaInfoReader.java:48) 
at org.apache.hadoop.mapred.JobInProgress.createSplits(JobInProgress.java:817) [ScriptRunner] 

Biz using skewed deneyin her zaman tekrarlanabilir ve biz kullandığınızda olmaz düzenli katılım.

mapreduce.jobtracker.split.metainfo.maxsize=-1'u ayarlamayı denedik ve bunun job.xml dosyasında olduğunu görebiliriz, ancak hiçbir şey değişmez!

Burada neler oluyor? Bu, using skewed tarafından oluşturulan dağıtım örneğiyle bir hata mı? Neden bu paramın -1'a değiştirilmesine yardım etmiyor?

+0

bir jira hatası dosyalamaya karar verdi: https://issues.apache.org/jira/browse/PIG-3411, – ihadanny

+0

güncellenecek mapreduce.jobtracker.split.metainfo değiştirdiğini buldu. maxsize, sadece JobTracker seviyesinde, iş seviyesinde çalışmama konusunda bilinir, bakınız: https://groups.google.com/a/cloudera.org/forum/#!topic/cdh-user/UWBMKplvGkg – ihadanny

+0

Bu soruna hiç bir çözüm bulamadınız mı? Benzer bir sorunla karşı karşıyayız. – KennethJ

cevap

1

1 MB'lık küçük bir tablo belleğe sığacak kadar küçüktür, çoğaltılmış birleştirmeyi deneyin. Çoğaltılmış birleştir yalnızca Harita'dır, başka birleştirme türü olarak sahneyi azaltmaz, bu nedenle katılma tuşlarındaki eğilmeye karşı bağışıklığa neden olmaz. Hızlı olmalı.

big = LOAD 'big_data' AS (b1,b2,b3); 
tiny = LOAD 'tiny_data' AS (t1,t2,t3); 
mini = LOAD 'mini_data' AS (m1,m2,m3); 
C = JOIN big BY b1, tiny BY t1, mini BY m1 USING 'replicated'; 

Büyük tablo her zaman deyimdeki ilk örnektir. Etrafına bir çalışma belleğe sığacak kadar küçük olan bölümleri içine küçük masa bölümlemek ve uygulamak daha gerekir gibi daha orijinal biçiminde küçük bir masa, belleğe uymuyorsa: GÜNCELLEME 1

büyük masaya aynı bölümleme, umarım büyük bölümler yaratan sisteme aynı bölümleme algoritmasını ekleyebilir, böylelikle yeniden bölümlemeyi zaman kaybetmezsiniz. Bölümlemeden sonra, çoğaltılmış birleştirmeyi kullanabilirsiniz, ancak her bölüm için ayrı ayrı çalışan domuz komut dosyası gerektirecektir.

mapreduce.job.split: Hadoop'un (> = 2.4.0 ama belki daha da erken) aşağıdaki yapılandırma özelliğini kullanarak iş düzeyinde maksimum bölünmüş boyutunu ayarlamak gerekir daha yeni sürümlerinde

+0

güzel bir fikir, ama küçük masa 1MB değil (düzenlenmiş soru) ve hadoop önbellek sığmaz (denedi) – ihadanny

+0

Güncelleme cevap. Bkz. Güncelleştirme 1. – alexeipab

+0

Tekrar teşekkürler, ancak asıl sorun için bir açıklama arıyorum. Bu harika bir çözümdür, ancak konvansiyonel birleşme ile ilgili sorunun ne olduğunu anlayana kadar devam edemiyorum – ihadanny

0

.metainfo.maxsize = -1