猪脚本:STORE命令不起作用

时间:2015-10-27 17:05:06

标签: python shell hadoop apache-pig

这是我第一次发布到StackOverflow,我希望有人可以提供帮助。我在猪脚本上相当新,遇到了一个我无法解决的问题。

以下是我尝试将结果写入文件时失败的pig脚本:

register 'myudf.py' using jython as myfuncs;
A = LOAD '$file_nm' USING PigStorage('$delimiter') AS ($fields);
B = FILTER A by ($field_nm) IS NOT NULL;
C = FOREACH B GENERATE ($field_nm) as fld;
D = GROUP C ALL;
E = FOREACH D GENERATE myfuncs.theResult(C.fld);
--DUMP E;
STORE E INTO 'myoutput/theResult';
EXEC;

当我转到屏幕时,我看到了E的结果。但是,我需要将结果临时存储在一个文件中。在Store命令之后,我收到的错误是:输出位置验证失败

我尝试过多种解决方法,例如删除theResult文件夹并删除theResult的早期内容,但我使用的命令都没有。这些都是:

hdfs dfs -rm myoutput/theResult

hadoop fs -rm myoutput/theResult

...同时使用shell(hs)和文件系统(fs)命令。我试图调用另一个函数(shell脚本,python函数等)来清除myoutput / theResult文件夹中存储的早期结果。我已经阅读了我能找到的每个网站,但没有任何工作。任何想法??

4 个答案:

答案 0 :(得分:1)

mapreduce的输出位置是一个目录。所以,你必须以这种方式尝试

hadoop fs -rmr myoutput/theResult

然后运行猪脚本。它会工作。 " RMR" - 删除递归,删除文件夹/文件 " RM" - 只是删除只删除文件

每次,您都需要更改输出路径或删除并使用相同的路径,因为HDFS是蠕虫(一次写入多次读取)模型存储。

答案 1 :(得分:0)

你可以尝试一些事情 -

  1. 确保输出控制器是有效路径。
  2. 删除整个目录,而不仅仅是其中的内容。删除带有&rmr的目录,并在运行pig脚本之前检查该路径是否存在。

答案 2 :(得分:0)

感谢您的回复。我现在有一个有效的解决方案:

fs -mkdir -p myoutput/theResult
fs -rm -r myoutput/theResult

第一行尝试创建目录,但“-p”会阻止错误(如果已存在)。然后第二行删除它。无论哪种方式,都会有一个要删除的目录,所以没有错误!

答案 3 :(得分:0)

当我们第一次使用Pig时,商店的输出很混乱。

store grp into '/output1';

这将创建名为' output1'的文件夹。在根。该文件夹不应该已经存在

您可以在此处提供自己的hdfs路径,例如/ user / thewhitetulip。

hdfs dfs -ls /output1

输出:

/output1/_SUCCESS
/output1/part-r-00000

part-r-00000文件是商店程序的输出。