Apache Pig:处于 DEFINE 而不是 RUNNING 状态的作业



我正在使用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中,然后运行相同的命令。效果很好。

但是为什么它在执行"加载"命令本身时没有给出错误?

正如穆拉利在他的回答中所解释的(我已经接受了(,脚本的 Map/Reduce 作业只有在遇到 STORE/DUMP 时才会被触发。

这是来自Apache Pig文档的更多解释


通常,Pig 按如下方式处理 Pig 拉丁语句:

首先,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)

脚本的 Map/Reduce 作业只有在遇到 STORE/DUMP 时才会触发。

在这种情况下,LOAD 命令的映射阶段仅在脚本中遇到 STORE/DUMP 时才开始。

默认执行模式为地图缩减。如果文件位于本地路径中,则必须使用本地模式执行。

pig -x local {pigfilename.pig}

请参考 : https://pig.apache.org/docs/r0.9.1/start.html#execution-modes

摘自上面的链接:

Pig 有两种执行模式或执行类型:

本地模式 - 要在本地模式下运行 Pig,您需要访问单个 机器;所有文件都使用本地主机安装和运行,并且 文件系统。使用 -x 标志(pig -x local(指定本地模式。 Mapreduce模式 - 要在mapreduce模式下运行Pig,你需要访问一个 Hadoop 集群和 HDFS 安装。Mapreduce模式是默认的 模式;您可以(但不需要(使用 -x 标志(pig OR 猪-x mapreduce(。

相关内容

  • 没有找到相关文章

最新更新