【问题标题】:How do I store data in multiple, partitioned files on HDFS using Pig如何使用 Pig 将数据存储在 HDFS 上的多个分区文件中
【发布时间】:2014-06-27 20:20:28
【问题描述】:

我有一个猪作业,它分析大量日志文件并生成一组属性和一组具有这些属性的 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,也有可能吗?我应该采取不同的方法来实现这个目标吗?

我对 Pig 还很陌生,因此对于我的方法的任何帮助或一般性建议将不胜感激。

提前致谢。

【问题讨论】:

  • 感谢您为我指明这个方向。虽然 PiggyBank 中的默认 MultiStorage 选项并不是我想要的,但我现在看到我想要做的事情应该可以通过自定义 StoreFunc 实现。我会看看源代码,看看我能想出什么。如果我能找到可用的解决方案,我会将其作为答案发布。

标签: hadoop apache-pig hdfs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2013-12-23
    相关资源
    最近更新 更多