gpt4 book ai didi

apache-pig - 如何在Pig中强制将存储(覆盖)到HDFS?

转载 作者:行者123 更新时间:2023-12-03 13:42:56 24 4
gpt4 key购买 nike

在开发使用STORE命令的Pig脚本时,我必须为每次运行删除输出目录,否则脚本会停止并提供:

2012-06-19 19:22:49,680 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 6000: Output Location Validation Failed for: 'hdfs://[server]/user/[user]/foo/bar More info to follow:
Output directory hdfs://[server]/user/[user]/foo/bar already exists


因此,我正在寻找一种自动解决方案,以自动删除目录,这也是一种在调用时不存在该目录的解决方案。

在Pig Latin Reference中,我找到了shell命令调用程序fs。不幸的是,只要任何东西产生错误,Pig脚本就会中断。所以我不能用

fs -rmr foo/bar


(即递归删除),因为如果目录不存在,它将中断。一会儿我以为我可以用

fs -test -e foo/bar


这是一个测试,应该不会失败,所以我想。但是,Pig再次将 test的不存在目录上的返回代码解释为失败代码并中断。

Pig项目有一个 JIRA ticket来解决我的问题,并为STORE命令建议一个可选参数OVERWRITE或FORCE_WRITE。无论如何,我出于必要使用了Pig 0.8.1,并且没有这样的参数。

最佳答案

最后,我在grokbase上找到了解决方案。由于找到该解决方案花了太长时间,因此我将在此处进行复制并添加它。

假设您要使用语句存储输出

STORE Relation INTO 'foo/bar';


然后,为了删除目录,您可以在脚本开始处调用

rmf foo/bar


不“;”或引号,因为它是shell命令。

我现在无法重现它,但是在某个时间点我收到一条错误消息(有关丢失文件的信息),我只能假定rmf干扰了map / reduce。因此,我建议将调用放在任何关系声明之前。 SET后,REGISTER和默认值应该没问题。

例:

SET mapred.fairscheduler.pool 'inhouse';
REGISTER /usr/lib/pig/contrib/piggybank/java/piggybank.jar;
%default name 'foobar'
rmf foo/bar
Rel = LOAD 'something.tsv';
STORE Rel INTO 'foo/bar';

关于apache-pig - 如何在Pig中强制将存储(覆盖)到HDFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com