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

Posted

技术标签:

【中文标题】Pig UDF 或 Pig Latin 还是两者兼而有之?【英文标题】:Pig UDF or Pig Latin or both? 【发布时间】:2015-08-18 16:28:15 【问题描述】:

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

上下文: 我正在做一个重建 SQL“日志”数据库的项目,我必须设计新的 NoSQL 数据库。我正在学习 NoSQL,对 Hadoop/Cloudera 了解甚少。

    我想用 Pig 加载数据 我没有使用 Cloudera,但可能会使用它

感谢您的回答。

【问题讨论】:

【参考方案1】:

如果您可以在 Pig(或 Hive)中执行,请在 Pig(或 Hive)中执行。

否则,在 Java MapReduce 中执行。

猪的好处:

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

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

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

分区器的特殊用途来做 MapReduce 不适合做的事情。 非常讨厌的数据格式或完全非结构化的数据(视频、音频、原始人类可读文本) 在 DistributedCache 中进行复杂的操作(基本的事情可以通过 JOIN 和 USING 'replicated' 来完成) 希望其他人可以在 cmets 中添加他们在 Pig 中无法完成的事情。

【讨论】:

以上是关于Pig UDF 或 Pig Latin 还是两者兼而有之?的主要内容,如果未能解决你的问题,请参考以下文章

向 udf pig latin 发送矩阵

Pig Latin 中的用户定义函数

PL/SQL 能否可靠地转换为 Pig Latin 或带有 Pig Latin 和 Hive 的 Oozie 管道

UDF 可以访问调用 Pig 脚本中声明的参数或定义的值吗?

在 Pig 中使用 Hive UDF

Pig 中的 Python UDF