hadoop - PIG LATIN 脚本错误 1000

标签 hadoop apache-pig

我创建了以下脚本,其中我尝试使用 piggybank UDF:

register /home/hduser/pig/contrib/piggybank/java/piggybank.jar;
divs = load 'NYSE_dividends.txt' using PigStorage(',') as (exchange:chararray, symbol:chararray, date:chararray, dividends:float);
backwards = foreach divs generate 
org.apache.pig.piggybank.evaluation.string.Reverse(symbol);
store backwards into '/user/hduser/backwards.csv';

当我在 GRUNT shell 中逐行运行上面的代码时,它工作正常,但是,当我尝试将它作为脚本运行时,出现以下错误:

2014-03-10 22:42:25,375 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000: Error during parsing. File not found: /user/hduser/register.pig

我在伪集群模式下使用 HADOOP 1.2.1 和 PIG 0.12。

日志如下:

Pig Stack Trace
---------------
ERROR 1000: Error during parsing. File not found: register.pig

org.apache.pig.tools.pigscript.parser.ParseException: File not found: register.pig
    at org.apache.pig.tools.grunt.GruntParser.loadScript(GruntParser.java:547)
    at org.apache.pig.tools.grunt.GruntParser.processScript(GruntParser.java:509)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.Script(PigScriptParser.java:1014)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:550)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:198)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:173)
    at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69)
    at org.apache.pig.Main.run(Main.java:541)
    at org.apache.pig.Main.main(Main.java:156)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:160)

最佳答案

我认为您正在使用“Programming Pig”(作者 Alan Gates,2011 年,O'Reilly Media)中的示例,其中有一个名为“register.pig”的程序。您未在此处显示的一条信息是您如何执行命令,所以我猜您运行了:

pig -f /user/hduser/register.pig

这个路径看起来像是在引用 HDFS,但文件应该在你的本地文件系统上,所以你应该试试

pig -f/local/path/register.pig

注意:您也可以在执行脚本时在命令行上注册 UDF。这样您就不必在脚本中注册它,如果您不想的话。

pig -f/local/path/register.pig -Dpig.additional.jars=/home/hduser/pig/contrib/piggybank/java/piggybank.jar

关于hadoop - PIG LATIN 脚本错误 1000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307034/

相关文章:

hadoop - hadoop/mapreduce本地作业目录未删除

hadoop - 如何避免 Parquet MemoryManager 异常

java - iso 的 pig UDF 到 yyyy-mm-dd hh :mm:ss. 000

java - 使用 Java 在 Hbase 中使用过滤器获取固定行

hadoop - 是否有任何人在cloudera实现或开发impala?

json - 解析Hadoop中包含的复杂Json字符串

hadoop - 在对多行数据集使用 Pig 时对相似值执行计数

hadoop - 在hadoop上使用udf运行Pig脚本

hadoop fs 命令显示本地文件系统而不是 hdfs

java - 在MapReduce中使用列表作为值返回相同的值