这是我第一次发布到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文件夹中存储的早期结果。我已经阅读了我能找到的每个网站,但没有任何工作。任何想法??
答案 0 :(得分:1)
mapreduce的输出位置是一个目录。所以,你必须以这种方式尝试
hadoop fs -rmr myoutput/theResult
然后运行猪脚本。它会工作。 " RMR" - 删除递归,删除文件夹/文件 " RM" - 只是删除只删除文件
每次,您都需要更改输出路径或删除并使用相同的路径,因为HDFS是蠕虫(一次写入多次读取)模型存储。
答案 1 :(得分:0)
你可以尝试一些事情 -
答案 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文件是商店程序的输出。