Pig 脚本:STORE 命令不起作用
Posted
技术标签:
【中文标题】Pig 脚本:STORE 命令不起作用【英文标题】:Pig Script: STORE command not working 【发布时间】:2015-10-27 17:05:06 【问题描述】:这是我第一次在 *** 上发帖,希望有人能提供帮助。我对 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 文件夹中的早期结果。我已经阅读了我能找到的所有网站,但没有任何效果。有什么想法吗??
【问题讨论】:
【参考方案1】:mapreduce 的输出位置是一个目录。所以,你一定试过这种方式
hadoop fs -rmr myoutput/theResult
然后运行 pig 脚本。它会起作用的。 “rmr” - 删除递归,删除文件夹/文件 "rm" - 只是删除它只删除文件
每次,您都需要更改输出路径或删除并使用相同的输出路径,因为 HDFS 是 蠕虫(一次写入多次读取)模型存储。
【讨论】:
【参考方案2】:你可以尝试几件事-
-
确保输出导向器是有效路径。
删除整个目录,而不仅仅是其中的内容。使用 'rmr 删除目录并在运行 pig 脚本之前检查该路径是否不存在。
【讨论】:
【参考方案3】:感谢您的两位回复。我现在有一个可行的解决方案:
fs -mkdir -p myoutput/theResult
fs -rm -r myoutput/theResult
第一行试图创建一个目录,但是如果它已经存在,“-p”可以防止错误。然后第二行将其删除。无论哪种方式,都会有一个要删除的目录,所以没有错误!
【讨论】:
【参考方案4】:第一次使用 Pig 时,store 的输出很混乱。
store grp into '/output1';
这将在根目录中创建名为“output1”的文件夹。该文件夹不应已存在
您可以在此处提供自己的 hdfs 路径,例如 /user/thewhitetulip。
hdfs dfs -ls /output1
输出:
/output1/_SUCCESS
/output1/part-r-00000
part-r-00000 文件是 store 程序的输出。
【讨论】:
以上是关于Pig 脚本:STORE 命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章
由于 piggybank.jar 的问题,AWS 自己的提交 Pig 作业的示例不起作用
Pig UDF 似乎总是在单个减速器中运行 - PARALLEL 不起作用