我正在运行一个猪脚本,如下所示
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
在pig脚本中,它无法打开B的迭代器,即(它无法为以下行分配迭代器)
B = FOREACH A GENERATE com.first.UPPER(exchange);
'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
答案 0 :(得分:0)
好的两件事,
如果您只想对大写/小写进行类型转换,为什么不使用内置函数UPPER / LOWER。 您可以在参考手册中找到用法。
如果您想继续使用相同的方法,
它应该是
B =上一代(交换);
您已将其定义为DEFINE UPPER com.first.UPPER();
答案 1 :(得分:0)
我遇到了这个问题,在打破了我的脑袋之后,我发现这个漏洞存在于输入数据中,即使我通过替换null进行清理。我有一个像'(null)'这样的字段的记录,它导致一切都失败了。如果您有这样的错误记录,请检查一次。
答案 2 :(得分:0)
它的avro版本给我造成了这个错误。 我使用的是avro-1.7.6.jar。将其更改为avro-1.4.0.jar解决了我的问题。
答案 3 :(得分:0)
你是否正在运行针对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添加为外部libary / dependency
我正在准备好试图在hadoop 2.2.0中运行猪12并且以上步骤适合我
UPDATE 我在猪jira上发布了我的问题,他们回应了。他们有一个已经为hadoop2 pig-h2.jar编译的猪罐Barcode Rendering Framework 这个罐子的maven标签是
org.apache.pig 猪 H2 0.12.0 提供
答案 4 :(得分:0)
安全模式也是这个例外的原因 运行以下命令
hadoop dfsadmin -safemode leave