如何使用Pig将数据存储在HDFS上的多个分区文件中

时间:2014-06-27 20:20:29

标签: hadoop apache-pig hdfs

我有一份猪作业,它分析大量日志文件,并在一组属性和一包具有这些属性的ID之间生成关系。我想将这种关系存储在HDFS上,但是我希望以一种友好的方式对其他Hive / Pig / MapReduce作业进行操作,以便对数据或数据子集进行操作而无需完全摄取我的猪工作的输出,因为这是一个大量的数据。

例如,如果我的关系的架构类似于:

relation: {group: (attr1: long,attr2: chararray,attr3: chararray),ids: {(id: chararray)}}

我真的希望能够对这些数据进行分区,将其存储在一个看起来像这样的文件结构中:

/results/attr1/attr2/attr3/file(s)

其中路径中的attrX值是组中的值,并且文件仅包含id。这样我就可以轻松地对我的数据进行子集化,以便进行后续分析而无需重复数据。

即使使用自定义StoreFunc,这样的事情是否可行?我是否应采取不同的方法来实现这一目标?

我对猪很新,所以对我的方法的任何帮助或一般性建议都会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

Multistore并不适合我尝试做的事情,但事实证明它是如何编写自定义StoreFunc以编写多个分区输出文件的一个很好的例子。我下载了Pig源代码并创建了我自己的存储函数来解析组元组,使用每个项来构建HDFS路径,然后解析id包,每行写一个ID到结果文件中。