Pig UDF 或 Pig Latin 或两者兼而有之?

Pig UDF or Pig Latin or both?

在什么情况下我们应该使用 Pig UDF,在什么情况下我们应该使用 Pig Latin

上下文: 我正在进行重建 SQL "logs" 数据库的项目,我必须设计新的 NoSQL 数据库。我正在学习 NoSQL 并且对 Hadoop/Cloudera.

知之甚少
  1. 我想用 Pig 加载数据
  2. 我没有使用 Cloudera,但可能会用到它

感谢您的回答。

如果你能在 Pig(或 Hive)中完成,就在 Pig(或 Hive)中完成。

否则,在 Java MapReduce 中执行。

猪的好处:

像 CSV 这样的结构化数据真的很容易加载和使用 不比 Java 慢多少 不易出现 Java 级错误 更容易读写 无需编译:更易维护,更易部署 有一些事情一开始您可能认为在 Pig 中不能做并且想使用 Java 来做,但是一旦您对 Pig 有了更多的了解就可以在 Pig 中做:

您可以在 Java 中编写用户定义的加载器。无论如何,您将要编写一些 Java 来解析复杂的数据格式,那么为什么不在 Pig Loader 中进行呢? 嵌套 map 和 bag 数据类型可以很好地模拟分层数据结构,但您可能不得不编写大量 UDF。 您可以在 Pig 中使用 Java MapReduce。这允许您在 Pig 中执行困难的操作,而在其他地方执行更简单的操作。 这里有一些,但你明白了。 Pig 是非常可定制的,一般来说你最终会写得更少 Java。

基本的东西很容易。我们可以做一些事情,比如分层数据结构,以及一些努力的自定义加载。好的,那还剩下什么?

分区器的奇异用途来做一些 MapReduce 不打算做的事情。 非常糟糕的数据格式或完全非结构化的数据(视频、音频、人类可读的原始文本) 在 DistributedCache 中做复杂的操作(基本的事情可以用 JOIN 和 USING 'replicated' 完成) 希望其他人可以在评论中添加他们在 Pig 中无法做到的事情。