pig - 包含多个 jar 的注册目录

Posted

技术标签:

【中文标题】pig - 包含多个 jar 的注册目录【英文标题】:pig - register directory that contains multiple jars 【发布时间】:2016-03-09 09:41:40 【问题描述】:

我在本地模式下运行一个猪脚本,我可以注册包含 jar 的目录并且一切正常:

register '/home/q/2/'

Wwile 在 mapreduce 模式下运行完全相同的脚本我收到如下错误:

        at org.apache.pig.PigServer.storeEx(PigServer.java:1034)
        ... 15 more
Caused by: java.io.FileNotFoundException: /var/tmp/home/q/2 (Is a directory)

您能否建议我在 mapreduce 模式下运行时如何注册 dir?

【问题讨论】:

【参考方案1】:

尝试在本地或 mapreduce 模式下运行以下命令两次:

REGISTER '/home/q/2/' ------- // 注册一个目录中的所有 jars。

在同一会话中执行两次,您将在第二次注册文件夹时遇到此错误:

错误 2999:意外的内部错误

这是因为猪编译器不理解两件事:

一个。 jars 依赖解析。

b.要导入 jar 的顺序。

但是,如果您在注册时指定了 jar 的确切路径:

REGISTER '/home/q/2/myudfs.jar' ----------- // 你可以像这样注册 jar “n” 次。

只需在本地或 map reduce 模式下在脚本中单独注册每个 jar。

这有一个优势,因为在某些情况下,由于依赖解析问题,您的 jar 需要按特定顺序导入。

例如:用于处理 Json 数据的 twitter 大象​​鸟项目有多个 jar 依赖项,因此您需要在 Pig 中以正确的顺序导入它们,否则您将始终面临此类异常。

【讨论】:

【参考方案2】:

你应该可以做一个流动的:

将您的 jar 上传到 hdfs 并从那里注册 如果您控制集群,则可以将其添加到标准共享库中

【讨论】:

以上是关于pig - 包含多个 jar 的注册目录的主要内容,如果未能解决你的问题,请参考以下文章

未设置 Hadoop Pig 输出目录

使用 Pig 访问 Hbase

如何在 build.gradle 中指定“pig-0.13.0-h2.jar”依赖?

微服务架构以及Pig项目分析

微服务架构以及Pig项目分析

无法通过在 Azure HDInsight 中运行的 piggybank.jar 使用 PIG 读取 Avro 文件