3

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

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 ie 打开迭代器(它无法为以下行分配迭代器)

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
4

5 回答 5

0

那么两件事,

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

  2. 如果要继续用同样的方法,应该是
    B = FOREACH A GENERATE UPPER(exchange);
    您已经将其定义为 DEFINE UPPER com.first.UPPER();

于 2013-05-16T18:45:38.353 回答
0

我遇到了这个问题,在打破我的脑袋后,我发现这个缺陷存在于输入数据中,即使我是通过替换 null 来清理的。我有一条记录,其中包含“(null)”之类的字段,这导致一切都失败了。如果您有这样的不良记录,只需检查一次。

于 2013-09-15T14:11:58.213 回答
0

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

于 2014-03-06T07:48:54.263 回答
0

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

  1. 下载 pig-0.12.0.tar.gz
  2. 解压jar并设置权限
  3. 然后在解压后的目录中使用 '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 中运行 pig 12 的确切跟踪,并且上述步骤对我有用

更新我在猪吉拉上发布了我的问题,他们做出了回应。他们已经为 hadoop2 pig-h2.jar 编译了一个猪 jar,这里http://search.maven.org/#artifactdetails|org.apache.pig|pig|0.12.0|jar 这个 jar 的 maven 标签是

org.apache.pig pig h2 0.12.0 提供

于 2016-08-26T18:54:05.873 回答
0

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

hadoop dfsadmin -safemode 离开

于 2017-05-23T07:09:14.287 回答