Pig: 0.8.1-cdh3u2
Hadoop: 0.20.2-cdh3u0
调试FIELD_DISCARDED_TYPE_CONVERSION_FAILED
警告,但我似乎无法在任何地方打印个别警告。通过-w
或aggregate.warnings=false
开关禁用聚合会删除摘要消息,但它也会删除实际警告,因此我无法看到哪种类型转换失败。
这次运行的猪日志中没有任何内容,而且我无法找到带有个别警告的日志。我是否想念任何明显的东西,或者根本不起作用?
答案 0 :(得分:0)
Hadoop作业日志在本地记录在每个计算节点上。因此,首先需要设置hadoop集群管理器以将日志文件收集到分布式文件系统中,以便分析它们。如果您使用Hadoop-on-demand(http://hadoop.apache.org/docs/r0.17.0/hod.html),您应该可以通过指定以下内容来实现:
log-destination-uri = hdfs://host123:45678/user/hod/logs
请参阅http://hadoop.apache.org/docs/r0.17.0/hod_user_guide.html#Collecting+and+Viewing+Hadoop+Logs
上的HOD文档在HDFS上登录后,您可以运行简单的PIG查询来查找违规转换。像下面这样的东西可以做到这一点:
a1= LOAD '*.log' USING PigStorage(']') ;
a2= FILTER a1 by ($1 MATCHES ' WARN.*Unable to interpret value.*');
dump a2;
答案 1 :(得分:0)
很难找到导致问题的数据或值,但至少可以找到哪个列正在创建此问题。找到列后,您可以使用动态调用者来帮助您进行类型转换。
如何使用动态调用者:
DEFINE ConvertToDouble InvokeForDouble('java.lang.Double.parseDouble','String');ConvertToDouble(列);