我正在使用Apache Pig。我正在尝试将逗号分隔文件加载为Pig表。加载文件时不会抛出任何错误。 但是当我尝试使用" dump"打印该表时命令,它给出错误。
我加载的文件
Error,fdgdf
Error,dfgdf
Error,dfgdf
Info,dfgdf
Info,dfgdf
Info,dfgdf
Info,dfgdf
Info,dfgdf
Info,dfgdf
Debug,dfgdf
Debug,dfgdf
Debug,dfgdf
Debug,dfgdf
Debug,dfgdf
Debug,dfgdf
加载命令
logFile1 = LOAD 'PigTestFile' using PigStorage();
打印表的命令
dump logFile1
我得错误
led Jobs:
JobId Alias Feature Message Outputs
job_1454617624671_0152 logFile1 MAP_ONLY Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: hdfs:
//ip-172-31-53-48.ec2.internal:8020/user/e1681fe26eed362777aabca1682510/PigTestFile
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:279)
at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128)
at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:194)
at java.lang.Thread.run(Thread.java:745)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276)
Caused by: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://ip-172-31-53-48.ec2.internal:8020/user/e1681fe26eed362777aabca1682510/PigTestFile
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:323)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:265)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigTextInputFormat.listStatus(PigTextInputFormat.java:36)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:387)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:265)
... 18 more
hdfs://ip-172-31-53-48.ec2.internal:8020/tmp/temp1258481141/tmp-1928081547,
:
:
2016-02-07 06:31:20,100 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Failed!
2016-02-07 06:31:20,107 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias logFile1. Backend error : java.lang.IllegalStateException: Job in state DEFINE instead of RUNNING
[编辑] 当我仔细阅读日志时,我发现它无法找到用于加载表的文件。它期待它在HDFS中。我的文件在本地框中的位置。 然后我将文件移动到HDFS,然后运行相同的命令。它运作良好。
但是为什么在执行" Load"命令本身??
答案 0 :(得分:1)
正如Murali在他的回答中解释的那样(我已经接受)只有在遇到STORE / DUMP时才会触发脚本的Map / Reduce作业。
对此的更多解释一般情况下,Pig处理Pig Latin语句如下:
首先,Pig验证所有语句的语法和语义。 接下来,如果Pig遇到DUMP或STORE,Pig将执行语句。 在这个例子中,Pig将验证LOAD和FOREACH语句,但不执行它们。
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
B = FOREACH A GENERATE name;
在此示例中,Pig将验证然后执行LOAD,FOREACH和DUMP语句。
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float);
B = FOREACH A GENERATE name;
DUMP B;
(John)
(Mary)
(Bill)
(Joe)
答案 1 :(得分:0)
只有遇到STORE / DUMP时才会触发脚本的Map / Reduce作业。
在这种情况下,只有在脚本中遇到STORE / DUMP时,才会启动LOAD命令的Map阶段。
默认执行模式是map reduce。如果文件位于本地路径中,则使用本地模式执行。
Character
参考: https://pig.apache.org/docs/r0.9.1/start.html#execution-modes
从以上链接中摘录:
Pig有两种执行模式或exectypes:
本地模式 - 要在本地模式下运行Pig,您需要访问单个模式 机;所有文件都使用您的本地主机安装和运行 文件系统。使用-x标志指定本地模式(pig -x local)。 Mapreduce模式 - 要在mapreduce模式下运行Pig,您需要访问a Hadoop集群和HDFS安装。 Mapreduce模式是默认模式 模式;您可以,但不需要,使用-x标志(猪OR)指定它 pig -x mapreduce)。