错误1066:无法打开猪的别名迭代器

时间:2013-03-21 11:34:30

标签: user-defined-functions apache-pig

我正在运行一个猪脚本,如下所示

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

5 个答案:

答案 0 :(得分:0)

好的两件事,

  1. 如果您只想对大写/小写进行类型转换,为什么不使用内置函数UPPER / LOWER。 您可以在参考手册中找到用法。

  2. 如果您想继续使用相同的方法, 它应该是
    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所涉及的步骤的摘要打字盒

  1. 下载pig-0.12.0.tar.gz
  2. 解压缩jar并设置权限
  3. 然后在解压缩的目录中使用&#39; ant clean jar -Dhadoopversion = 23&#39;编译src。 那么你需要在maven的类路径上获取jar,例如,在同一目录中
  4.   

    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