2011-07-16 73 views
0

我正在运行使用多个猪脚本输出的弹性mapreduce管道。本质上,猪脚本的输出存储在S3的某个位置,并且由于数据的大小很大,因此创建的输出文件被命名为part-xxxxx。Pig:更改输出文件的格式名称

现在我的问题是,我的管道中的其中一个步骤是复制两个不同位置的内容并将它们放在一起,然后对整个集合进行处理。现在由于这两个位置的文件命名相似(part-00000到part-00342),我的文件在复制过程中被覆盖。

默认情况下,pig在给定的位置以这种文件名格式生成我的输出文件。最初我曾经将猪输出文件下载到我的磁盘,编写一个python程序来重命名它们,然后将它们重新上传到S3。由于数据量庞大,我现在无法做到这一点。

我没有自己的管道步骤,实际上做这个复制。我可以控制的所有(可能)是复制文件的名称)。所以我需要知道是否有一种方法可以将前缀附加到由pig创建的part文件的名称上。

谢谢

回答

0

我不确定你可以更改猪的前缀。

即使你说你不能控制它,我绝对认为最好是让下游过程有两个输入目录。这听起来真的是低效率的,只需要将这两个目录复制到一个目录中即可。

如果您确实需要,您可以使用hadoop使用流式作业进行重命名,其中流式命令是“hadoop fs -cp”。让我知道如果你还没有看到这种方法,我可以把它写了一个博客帖子,已经意思反正...

0

您可以使用有所改变:

set mapreduce.output.basename 'MyDesiredPrefixName-'; /* This changes the part-r-0000 to a customized name */