2011-12-14 19 views
8
Pig: 0.8.1-cdh3u2 
Hadoop: 0.20.2-cdh3u0 

Debugowanie FIELD_DISCARDED_TYPE_CONVERSION_FAILED ostrzeżenia, ale nie mogę wydawać poszczególnych ostrzeżeń drukowanych w dowolnym miejscu. Wyłączenie agregacji za pomocą przełącznika -w lub aggregate.warnings=false powoduje usunięcie komunikatów podsumowania, ALE usuwa również aktualne ostrzeżenie, więc nie widzę powodu, dla którego konwersja typu nie powiodła się.Dane wyjściowe nie są zagregowane ostrzeżeń o śledzeniu?

Nie ma niczego zapisanego w dzienniku świni dla tego biegu, I nie ma miejsca, gdzie mogę zlokalizować dzienniki z indywidualnymi ostrzeżeniami. Czy tęskniłem za czymś oczywistym, czy po prostu nie działa?

+0

Czekam na odpowiedź na to pytanie. Zazwyczaj znajduję rekord ręcznie. –

+0

Mam już blisko 100 milionów rekordów i dodając 1/2 miliona dziennie z ponad 300 kolumnami w każdym rzędzie. Są to liczby dziesiętne. Bez wsparcia narzędziowego, które jest gorsze niż szukanie igły w polu stogów siana. – andrew

+0

Jedyne co mogę zrobić, to załadować twoje dane jako 'chararray' do świni, a następnie napisać UDF, który próbuje go przekonwertować. Jeśli zostanie zgłoszony wyjątek, zwróć element (nie zwracaj niczego inaczej). –

Odpowiedz

0

Dzienniki zadań Hadoop są rejestrowane lokalnie na każdym węźle obliczeniowym. Dlatego najpierw musisz skonfigurować menedżera klastra hadoop, aby zebrać logi do systemu plików rozproszonych, abyś mógł je przeanalizować. Jeśli używasz Hadoop-on-demand (http://hadoop.apache.org/docs/r0.17.0/hod.html) powinien być w stanie to zrobić, określając coś takiego:

log-destination-uri = hdfs://host123:45678/user/hod/logs 

Zobacz dokumentację HOD w http://hadoop.apache.org/docs/r0.17.0/hod_user_guide.html#Collecting+and+Viewing+Hadoop+Logs

Po masz dzienniki na HDFS można uruchomić proste zapytanie PIG, aby znaleźć szkodliwą konwersję. Coś jak poniżej powinno załatwić sprawę:

a1= LOAD '*.log' USING PigStorage(']') ; 
a2= FILTER a1 by ($1 MATCHES ' WARN.*Unable to interpret value.*'); 
dump a2; 
0

Trudno dowiedzieć się, jakie dane lub wartość jest przyczyną problemu, ale przynajmniej można dowiedzieć się, jakie kolumny tworząc ten problem. Po znalezieniu kolumny możesz użyć Dynamic Invoker, która może Ci pomóc w konwersji typu.

Jak korzystać z dynamicznych Invoker:
DEFINE ConvertToDouble InvokeForDouble ('java.lang.Double.parseDouble', 'String');

ConvertToDouble (column_name);

Powiązane problemy