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

Gỡ lỗi FIELD_DISCARDED_TYPE_CONVERSION_FAILED cảnh báo, nhưng dường như tôi không thể thực hiện các cảnh báo riêng lẻ được in ở bất kỳ đâu. Vô hiệu hóa tổng hợp thông qua chuyển đổi -w hoặc aggregate.warnings=false xóa các tin nhắn tóm tắt, NHƯNG cũng loại bỏ cảnh báo thực tế, vì vậy tôi không thể xem chuyển đổi loại nào không thành công.Vị trí đầu ra cảnh báo không được tổng hợp của lợn?

Không có gì được ghi trong nhật ký của con lợn cho lần chạy này, VÀ không có nơi nào tôi có thể định vị nhật ký với các cảnh báo riêng lẻ. Tôi đã bỏ lỡ bất cứ điều gì rõ ràng hoặc nó chỉ đơn giản là không hoạt động?

+0

Tôi mong được câu trả lời của câu hỏi này. Tôi thường tìm thấy bản ghi theo cách thủ công. –

+0

Tôi đã gần 100 triệu bản ghi và thêm 1/2 triệu mỗi ngày với hơn 300 cột trong mỗi hàng. Và đây là những số thập phân. Nếu không có công cụ hỗ trợ đó là tồi tệ hơn tìm kim trong một lĩnh vực haystacks. – andrew

+0

Điều duy nhất tôi có thể nghĩ là tải dữ liệu của bạn dưới dạng 'chararray' vào lợn, sau đó viết UDF để cố chuyển đổi nó. Nếu một ngoại lệ được ném ra, trả lại hàng (không trả lại bất cứ điều gì khác). –

Trả lời

0

Nhật ký công việc Hadoop được ghi cục bộ trên mỗi nút tính toán. Do đó trước tiên bạn cần phải thiết lập trình quản lý cụm Hadoop của bạn để thu thập các tệp nhật ký vào hệ thống tệp được phân phối để bạn có thể phân tích chúng. Nếu bạn sử dụng Hadoop-on-demand (http://hadoop.apache.org/docs/r0.17.0/hod.html), bạn sẽ có thể làm điều đó bằng cách xác định một cái gì đó như:

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

Xem tài liệu HOD tại http://hadoop.apache.org/docs/r0.17.0/hod_user_guide.html#Collecting+and+Viewing+Hadoop+Logs

Sau khi bạn có các bản ghi trên HDFS bạn có thể chạy một truy vấn PIG đơn giản để tìm chuyển đổi vi phạm. Một cái gì đó như sau nên làm như lừa:

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

Thật khó để tìm thấy trong đó dữ liệu hoặc giá trị là gây ra vấn đề, nhưng ít nhất bạn có thể tìm thấy trong đó cột được tạo ra vấn đề này. Khi bạn tìm thấy cột, bạn có thể sử dụng Dynamic Invoker có thể giúp bạn trong chuyển đổi loại.

Làm thế nào để sử dụng động Invoker:
DEFINE ConvertToDouble InvokeForDouble ('java.lang.Double.parseDouble', 'String');

ConvertToDouble (column_name);