【发布时间】:2015-03-23 05:23:14
【问题描述】:
对于 Pig 的简单 LOAD 和 DUMP 操作,我收到错误 Unable to open iterator for alias。我已经看过答案了:
ERROR 1066: Unable to open iterator for alias - Pig
但他们没有帮助我。
我的环境:
OS: Windows 7
Pig version: 0.13.0
Mode: Local
它在错误中显示异常是“由”导致更改失败 TMP 目录中文件的权限。但是当我查看tmp目录时,没有这个文件(可能是命令完成后被删除了?)。
以下日志(带有 -v 和 -w 选项):
'D:\H\HADOOP-2.6.0\bin\hadoop-config.cmd' is not recognized as an internal or external command,
operable program or batch file.
15/01/24 09:20:22 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/01/24 09:20:22 INFO pig.ExecTypeProvider: Picked LOCAL as the ExecType
2015-01-24 09:20:22,909 [main] INFO org.apache.pig.Main - Apache Pig version 0.13.0 (r1606446) compiled Jun 29 2014, 02:29:34
2015-01-24 09:20:22,909 [main] INFO org.apache.pig.Main - Logging error messages to: d:\Pig\pig-0.13.0\bin\
2015-01-24 09:20:24,267 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file C:\Users\Venkat/.pigbootup not found
2015-01-24 09:20:24,438 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
2015-01-24 09:20:26,205 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2015-01-24 09:20:26,236 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias a
2015-01-24 09:20:26,236 [main] ERROR org.apache.pig.tools.grunt.Grunt - org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias a
at org.apache.pig.PigServer.openIterator(PigServer.java:912)
at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:752)
at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:372)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:228)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:203)
at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81)
at org.apache.pig.Main.run(Main.java:479)
at org.apache.pig.Main.main(Main.java:156)
Caused by: org.apache.pig.backend.datastorage.DataStorageException: ERROR 0: java.io.IOException: Failed to set permissions of path: \tmp\temp946561981 to 0700
at org.apache.pig.impl.io.FileLocalizer.relativeRoot(FileLocalizer.java:484)
at org.apache.pig.impl.io.FileLocalizer.getTemporaryPath(FileLocalizer.java:515)
at org.apache.pig.impl.io.FileLocalizer.getTemporaryPath(FileLocalizer.java:511)
at org.apache.pig.PigServer.openIterator(PigServer.java:887)
... 7 more
Caused by: java.io.IOException: Failed to set permissions of path: \tmp\temp946561981 to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)
at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:286)
at org.apache.pig.backend.hadoop.datastorage.HPath.setPermission(HPath.java:122)
at org.apache.pig.impl.io.FileLocalizer.createRelativeRoot(FileLocalizer.java:495)
at org.apache.pig.impl.io.FileLocalizer.relativeRoot(FileLocalizer.java:481)
... 10 more
日志文件中还有详细信息:D:\Pig\pig-0.13.0\bin\data-1.txt1422071424329.log
猪栈跟踪
错误 1066:无法打开别名 a 的迭代器 org.apache.pig.impl.logicalLayer.FrontendException:错误 1066:无法打开别名 a 的迭代器 在 org.apache.pig.PigServer.openIterator(PigServer.java:912) 在 org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:752) 在 org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:372) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:228) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:203) 在 org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81) 在 org.apache.pig.Main.run(Main.java:479) 在 org.apache.pig.Main.main(Main.java:156) 原因:org.apache.pig.backend.datastorage.DataStorageException: ERROR 0: java.io.IOException: 无法设置路径权限:\tmp\temp946561981 to 0700 在 org.apache.pig.impl.io.FileLocalizer.relativeRoot(FileLocalizer.java:484) 在 org.apache.pig.impl.io.FileLocalizer.getTemporaryPath(FileLocalizer.java:515) 在 org.apache.pig.impl.io.FileLocalizer.getTemporaryPath(FileLocalizer.java:511) 在 org.apache.pig.PigServer.openIterator(PigServer.java:887) ... 7 更多 原因:java.io.IOException:设置路径权限失败:\tmp\temp946561981 to 0700 在 org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689) 在 org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662) 在 org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) 在 org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:286) 在 org.apache.pig.backend.hadoop.datastorage.HPath.setPermission(HPath.java:122) 在 org.apache.pig.impl.io.FileLocalizer.createRelativeRoot(FileLocalizer.java:495) 在 org.apache.pig.impl.io.FileLocalizer.relativeRoot(FileLocalizer.java:481)
... 10 更多
猪文件内容:
a = LOAD 's.csv' AS (NAME:chararray,COUNTRY:chararray,YEAR:int,SPORT:chararray,GOLD:int,SILVER:int,BRONZE:int,TOTAL:int);
DUMP a;
s.csv 的内容:
Yang Yilin China 2008 Gymnastics 1 0 2 3
Leisel Jones Australia 2000 Swimming 0 2 0 2
LOAD 语句的语法有什么问题吗? 是否有任何需要专门设置的环境变量 比 JAVA 和 JAVA_HOME?
【问题讨论】:
-
不确定权限的事情,但你应该明确说明在加载期间要使用哪个存储,在你的情况下
using PigStorage(' ')因为你的分隔符似乎是一个空格而不是 \t 作为 PigStorage 的默认值. -
@Venkat :正如 LiMuBei 所说,如果 s.csv 是制表符分隔的文件,那么它应该可以工作。如果 tab 不是分隔符,则必须使用 PigStorage('{delimiter}') 指定使用的分隔符
-
对于在寻找ERROR 1066: Unable to open iterator for alias 时发现此帖子的人,这里是generic solution。
-
我遇到了与您提到的相同的错误,当我正确提供输入目录时,我的工作正常。最初我错过了在
LOAD语句中指定正确的输入目录,并且很难调试原因,后来意识到我在找到它后是多么愚蠢。
标签: apache-pig