我正在运行一个猪脚本,如下所示
REGISTER '/home/vishal/FirstUdf.jar';
DEFINE UPPER com.first.UPPER();
A = LOAD '/home/vishal/exampleforPIG1' AS (exchange: chararray, symbol: chararray, date: int,value:float);
B= FOREACH A GENERATE com.first.UPPER(exchange);
DUMP B;
Following is my UDF in java
package com.first;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;
@SuppressWarnings("deprecation")
public class UPPER extends EvalFunc<String> {
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try {
String str = (String) input.get(0);
return str.toLowerCase();
} catch (Exception e) {
throw WrappedIOException.wrap(
"Caught exception processing input row ", e);
}
}
}
现在,当我尝试运行它时,它给了我以下错误
Pig Stack Trace
ERROR 1066: Unable to open iterator for alias B
org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias B
at org.apache.pig.PigServer.openIterator(PigServer.java:866)
at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:683)
at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:190)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:166)
at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:84)
at org.apache.pig.Main.run(Main.java:430)
at org.apache.pig.Main.main(Main.java:111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156) Caused by: java.io.IOException: Job terminated with anomalous status FAILED
at org.apache.pig.PigServer.openIterator(PigServer.java:858)
... 12 more
是什么,在猪脚本中,它无法打开B的迭代器即(它无法为以下行分配迭代器)
B = FOREACH A GENERATE com.first.UPPER(交换);
'exampleforPIG1'文件包含以下数据
NYSE CPO 2009-12-30 0.14
NYSE CPO 2009-09-28 0.14
NYSE CPO 2009-06-26 0.14
NYSE CPO 2009-03-27 0.14
NYSE CPO 2009-01-06 0.14
NYSE CCS 2009-10-28 0.414
NYSE CCS 2009-07-29 0.414
..
..
etc
好吧两件事,
我遇到了这个问题,在打破了我的脑袋之后,我发现这个漏洞存在于输入数据中,即使我通过替换null进行清理。我有一个像'(null)'这样的字段的记录,它导致一切都失败了。如果您有这样的错误记录,请检查一次。
它的avro版本给我造成了这个错误。我使用的是avro-1.7.6.jar。将其更改为avro-1.4.0.jar解决了我的问题。
你是否正在运行一个针对hadoop 2.2的猪0.12.0或更早的jar,如果是这种情况,那么我设法通过从src重新编译猪罐来解决这个错误,这里是debian类型盒子所涉及的步骤的摘要
mvn install:install-file -Dfile = pig.jar -DgroupId = {set a groupId} - DartifactId = {set a artifactId} -Dversion = 1.0 -Dpackaging = jar
或者如果在eclipse中,则将jar添加为外部库/依赖项
我正在准备好试图在hadoop 2.2.0中运行猪12,并且上述步骤对我有效
更新我在猪jira上发布了我的问题,他们回应了。他们有一个已经为hadoop2 pig-h2.jar编译的猪罐子这里http://search.maven.org/#artifactdetails|org.apache.pig|pig|0.12.0|jar这个罐子的maven标签是
org.apache.pig pig h2 0.12.0提供
安全模式也是因为此异常运行以下命令的原因
hadoop dfsadmin -safemode离开