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

问题描述 投票:3回答:5

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

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
user-defined-functions apache-pig
5个回答
0
投票

好吧两件事,

  1. 如果您想要做的只是对大写/小写进行类型转换,为什么不使用内置函数UPPER / LOWER。您可以在参考手册中找到用法。
  2. 如果你想继续使用相同的方法,它应该是 B =上一代(交换); 您已将其定义为DEFINE UPPER com.first.UPPER();

0
投票

我遇到了这个问题,在打破了我的脑袋之后,我发现这个漏洞存在于输入数据中,即使我通过替换null进行清理。我有一个像'(null)'这样的字段的记录,它导致一切都失败了。如果您有这样的错误记录,请检查一次。


0
投票

它的avro版本给我造成了这个错误。我使用的是avro-1.7.6.jar。将其更改为avro-1.4.0.jar解决了我的问题。


0
投票

你是否正在运行一个针对hadoop 2.2的猪0.12.0或更早的jar,如果是这种情况,那么我设法通过从src重新编译猪罐来解决这个错误,这里是debian类型盒子所涉及的步骤的摘要

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

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提供


0
投票

安全模式也是因为此异常运行以下命令的原因

hadoop dfsadmin -safemode离开

© www.soinside.com 2019 - 2024. All rights reserved.