运行 Apache Pig 脚本时如何查找 jar 依赖项?

Posted

技术标签:

【中文标题】运行 Apache Pig 脚本时如何查找 jar 依赖项?【英文标题】:How to find jar dependencies when running Apache Pig script? 【发布时间】:2015-06-17 09:01:56 【问题描述】:

我在运行一个简单的猪脚本以使用 HBaseStorage 将数据导入 HBase 时遇到一些困难

我遇到的错误是由:

Caused by: <file demo.pig, line 14, column 0> pig script failed to validate: java.lang.RuntimeException: could not instantiate 'org.apache.pig.backend.hadoop.hbase.HBaseStorage' with arguments '[rdf:predicate rdf:object]'              

Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V        
        at org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:427)

        at org.apache.pig.backend.hadoop.hbase.HBaseStorage.<init>(HBaseStorage.java:368)

        at org.apache.pig.backend.hadoop.hbase.HBaseStorage.<init>(HBaseStorage.java:239) 13_21.51.28.tar.gz
        ... 29 more

根据其他问题和线程,此问题的主要响应/答案是注册 HBaseStorage 引用所需的适当 jar。让我感到困惑的是,在给定适当的 Pig 函数的情况下,我应该如何识别所需的 JAR。

我什至尝试打开 hbase 和 pig 文件夹下的各种 jar 文件,以确保在 pig 脚本中注册了适当的类。

例如,由于java.lang.NoSuchMethodError是由org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V引起的

我专门导入了包含org.apache.hadoop.hbase.client.Scan的jar,没有用。

Pig 的文档没有提供任何我可以参考的明显链接和帮助。

我正在使用 Hadoop 2.7.0、HBase 1.0.1.1.、Pig 0.15.0。

如果您需要任何其他说明,请随时再次询问我。如果有人可以帮助我解决这个问题,我将不胜感激。

另外,从头开始安装 Hadoop 和相关软件更好,还是直接获取可用的 Hadoop 捆绑包之一更好?

【问题讨论】:

您解决了这个问题吗?将 hbase 从 0.98.3 升级到 1.0.1.1 后,我遇到了同样的问题。 【参考方案1】:

发布的jar有问题:hbase-client-1.0.1.1.jar

你可以用这段代码测试一下,会出现错误:

Scan scan = new Scan();
scan.setCacheBlocks(true);

我尝试过其他设置函数,例如 setCaching,它会引发相同的错误。当我检查源代码时,这些功能是存在的。也许只是手动编译 hbase-client-1.0.1.1.jar,我还在寻找更好的解决方案...

============

以上更新,发现根本原因是hbase-client-1.0.1.1.jar与旧版本不兼容。

https://issues.apache.org/jira/browse/HBASE-10841

https://issues.apache.org/jira/browse/HBASE-10460

set 函数的返回值发生变化,旧版本编译的 jar 不适用于当前版本。

对于你的问题,你可以修改pig脚本$PIG_HOME/bin/pig,设置debug=true,那么它只会打印运行信息。

【讨论】:

【参考方案2】:

您是否注册了所需的罐子。 最重要的罐子 habse、zookeeper 和番石榴 我通过在我的 pigscript 中注册 zookeeper jar 解决了类似的问题

【讨论】:

以上是关于运行 Apache Pig 脚本时如何查找 jar 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

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

在 Pig 中使用 Python UDF 时,如何让 Hadoop 查找导入的 Python 模块?

执行远程 Apache Pig 脚本时如何查看终端日志

无法使用 java 命令运行 Pig jar

Pig 中的 SimpleTextLoader UDF

使用 hacatalog 在 tez 模式下运行 pig 脚本时出错