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 的“转储”在 AWS 上不起作用

Pig 比较运算符在 GENERATE 中不起作用

Pig UDF 似乎总是在单个减速器中运行 - PARALLEL 不起作用

串行 AT 命令在 python 脚本中不起作用,但在 Minicom 中起作用

猪十进制值不起作用