这是我第一次张贴到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文件夹中的早期结果。我看了所有我能找到的网站,什么都没用。有什么想法吗??
4条答案
按热度按时间pgky5nke1#
有几件事你可以试试-
确保输出控制器是有效路径。
删除整个目录,而不仅仅是其中的内容。使用“rmr”删除目录,并在运行pig脚本之前检查路径是否不存在。
dtcbnfnu2#
mapreduce的输出位置是一个目录。所以,你一定是这样试的
然后运行Pig脚本。它会起作用的。”rmr“-remove recursive,删除文件夹/文件”rm“-remove,只删除文件
每次,您都需要更改输出路径或删除并使用相同的路径,因为hdfs是worm(一次写入多次读取)模型存储。
093gszye3#
谢谢你的回复。我现在有了一个可行的解决方案:
第一行尝试创建一个目录,但是“-p”可以防止已经存在的错误。然后第二行删除它。无论哪种方式,都会有一个目录要删除,所以没有错误!
hmtdttj44#
当我们第一次使用清管器时,仓库的输出是混乱的。
这将在根目录中创建名为“output1”的文件夹。文件夹不应已存在
您可以在这里提供自己的hdfs路径,比如/user/thewhitetulip。
输出:
part-r-00000文件是store程序的输出。