0

我正在运行一个弹性 mapreduce 管道,该管道使用多个猪脚本的输出。本质上,猪脚本的输出存储在 S3 上的某个位置,由于数据量很大,因此创建的输出文件命名为 part-xxxxx。

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

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

我不拥有实际执行此复制的管道步骤。我所能控制的(也许)是被复制的文件的名称)。所以我需要知道是否有办法为 pig 创建的零件文件的名称附加前缀。

谢谢

4

2 回答 2

0

我不确定您是否可以更改 pig 中的前缀。

即使您说您无法控制它,我绝对认为最好将下游进程设为两个输入目录。为了下一步而不得不将两个目录复制到一个目录中,这听起来确实效率低下。

如果你真的必须这样做,你可以使用 hadoop 使用流式作业进行重命名,其中流式传输命令是“hadoop fs -cp”。如果您还没有看到这种方法,请告诉我,我可以将其写为博客文章,无论如何都有意义...

于 2011-07-23T22:05:48.117 回答
0

您可以使用以下方法对其进行一些更改:

set mapreduce.output.basename 'MyDesiredPrefixName-';   /*  This changes the part-r-0000 to a customized name */
于 2016-07-07T14:32:21.580 回答