运行 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 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章