pig脚本:store命令不起作用

uubf1zoe  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(419)

这是我第一次张贴到stackoverflow,我希望有人可以帮助。我对pig脚本相当陌生,遇到了一个我无法解决的问题。
下面是一个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命令之后,我收到的错误是:output location validation failed。
我尝试了很多解决方法,比如删除theresult文件夹和删除theresult的早期内容,但是我使用的命令都不起作用。这些措施大致如下:

hdfs dfs -rm myoutput/theResult

hadoop fs -rm myoutput/theResult

…同时使用shell(hs)和文件系统(fs)命令。我尝试调用另一个函数(shell脚本、python函数等)来清除存储在myoutput/theresult文件夹中的早期结果。我看了所有我能找到的网站,什么都没用。有什么想法吗??

pgky5nke

pgky5nke1#

有几件事你可以试试-
确保输出控制器是有效路径。
删除整个目录,而不仅仅是其中的内容。使用“rmr”删除目录,并在运行pig脚本之前检查路径是否不存在。

dtcbnfnu

dtcbnfnu2#

mapreduce的输出位置是一个目录。所以,你一定是这样试的

hadoop fs -rmr myoutput/theResult

然后运行Pig脚本。它会起作用的。”rmr“-remove recursive,删除文件夹/文件”rm“-remove,只删除文件
每次,您都需要更改输出路径或删除并使用相同的路径,因为hdfs是worm(一次写入多次读取)模型存储。

093gszye

093gszye3#

谢谢你的回复。我现在有了一个可行的解决方案:

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

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

hmtdttj4

hmtdttj44#

当我们第一次使用清管器时,仓库的输出是混乱的。

store grp into '/output1';

这将在根目录中创建名为“output1”的文件夹。文件夹不应已存在
您可以在这里提供自己的hdfs路径,比如/user/thewhitetulip。

hdfs dfs -ls /output1

输出:

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

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

相关问题