0

我们最近才开始研究 Pig,并且在弄清楚它在结构化数据上的语法方面遇到了挑战。鉴于下面的示例数据模型,哪个更适合该问题,Hive 或 Pig,还是“其他”?

数据模型:

Item
 > id<long>
 > description<string>
 > source<collection of following>
     > source_id<long>
     > source_name<string>
     > relevant_link<collection of strings>
         > link_id<string>

Link
 > link_id<string>
 > metadata1<string>
 > metadata2<string>

常用操作:

  • 将各种格式的数据导入此格式
  • 查询(排序、聚合、采样、汇总)数据(最好由并非都是语言专家的团队)
  • 使用各种过滤器以各种格式加入和导出

这是大型数据集(150-500 GB 原始文本数据)的基本数据操作。

问题/疑问:

  • Pig 在加入该链接时向我们提出了挑战(pig 中的收藏品是一袋袋的袋子,变得非常抽象)。
  • Hive 是否擅长/更好地管理这些集合?
  • 我们预计会有很多“数据转换”活动,但是由于我们可以轻松地将数据拟合为类似 SQL 的格式,这是否使 Hive 成为更易于使用的解决方案?
4

1 回答 1

1

您可以尝试Pangool,Map Reduce 代码是用 Java 编写的,它简化了结构化数据的工作,依赖于元组和序列化的概念。对于您的特定情况,您可以将自定义序列化与基本上是 JSON 的 Avro 对象一起使用。它还简化了编写reduce side join 和需要由不同映射器处理的多个输入。

因此,Link 的一个 Pangool 映射器将 link_id 作为键发出,而 Item 的另一个 Pangool 映射器则与自身一起发出 link_id。但这可能很慢。

如果 map 侧连接是可能的(链接文件足够小以存储内存),您可以将其放入主代码中的 Serializable Java 对象并将其传递给映射器,这让生活变得非常容易。

于 2013-06-07T16:48:41.220 回答