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 的注册目录的主要内容,如果未能解决你的问题,请参考以下文章