我正在尝试使用Pig (0.15.0)从HBase (1.1.2)加载数据。我试过注册太多的罐子,但都没有成功。我可以用Java访问它,但不能用Pig访问它。下面我登记了所有的罐子。前五个,然后是我的Java代码使用的lib/*.jar then target/alternateLocation/*.jar。所有东西都安装在我的本地PC上,HBase运行在HDFS上。
--REGISTER /home/halmousli/hbase-1.1.2/lib/*.jar
--REGISTER /home/halmousli/mygit/Hbase/apachehbase/target/alternateLocation/*.jar
set hbase.zookeeper.quorum 'localhost'
data = LOAD 'hbase://emp' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('professional:designation', '-loadKey true')
as (id:bytearray,prof:CHARARRAY);
DUMP data;pig脚本无法验证:'org.apache.pig.backend.hadoop.hbase.HBaseStorage‘:java.lang.RuntimeException:不能用参数’专业:指定,-loadKey真‘来实例化'org.apache.pig.backend.hadoop.hbase.HBaseStorage’:-loadKey真不能解析:猪脚本无法解析:猪脚本无法验证: java.lang.RuntimeException:不能用参数“专业:指定”实例化‘org.apache.pig.backend.hadoop.hbase.HBaseStorage’,org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:199) at org.apache.pig.PigServer$Graph.parseQuery(PigServer.java:1735) at org.apache.pig.PigServer$Graph.access$000(PigServer.java:1443) at org.apache.pig.PigServer.parseAndBuild(PigServer.java:387) at org.apache.pig.PigServer.executeBatch(PigServer.java:412) at org.apache.pig.PigServer.executeBatch( org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171) at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:749) at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:376) at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230) at org.apache.pig.tools.grunt.GruntParser )org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81) at org.apache.pig.Main.run(Main.java:631) at org.apache.pig.Main.main(Main.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) by: /home/halmousli/mygit/Pig/mavenpigtester/src/main/resources/hbaseGetter.pig,第21行,列7>猪脚本无法验证: java.lang.RuntimeException:无法用参数的专业:指定实例化org.apache.pig.parser.LogicalPlanBuilder.buildLoadOp(LogicalPlanBuilder.java:897) at org.apache.pig.parser.LogicalPlanGenerator.load_clause(LogicalPlanGenerator.java:3568) at org.apache.pig.parser.LogicalPlanGenerator.op_clause(LogicalPlanGenerator.java:1625) at org.apache.pig.parser.LogicalPlanGenerator.general_statement(LogicalPlanGenerator.java:1102) at org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:560在org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:421) at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:191) . 19更多的原因是: java.lang.RuntimeException:无法用参数的专业名称实例化'org.apache.pig.backend.hadoop.hbase.HBaseStorage‘,在org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:772) at org.apache.pig.parser.LogicalPlanBuilder.buildLoadOp(LogicalPlanBuilder.java:885) . 25多原因是: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)在java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:740) .还有26 原因是: org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V : org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:427) at org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:427) at org.apache.pig.backend.hadoop.hbase.HBaseStorage.(HBaseStorage.java:368) . 31多2015年-12-30 11:19:14,794主要错误org.apache.pig.tools.grunt.Grunt -错误1200:猪脚本解析失败:pig脚本无法验证: java.lang.RuntimeException: java.lang.RuntimeException无法用参数的专业:指定实例化日志文件中的-loadKey true‘详细信息:-loadKey
我不知道为什么我看到的是:java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setCacheBlocks引起的。在我的Java代码中,我能够找到这个函数并运行它,但不能在Pig中运行,而且我使用的是相同的jars。
Scan scan = new Scan();
scan.setCacheBlocks(true); 有任何建议来解决这个问题或以其他方式从猪身上访问HBase吗?谢谢。
发布于 2016-01-04 15:11:08
以上错误的原因是我的hadoop版本和hbase之间不兼容。我安装了HBASE-0.98.16-hadoop 2,并且pig代码运行时没有出现错误。
通常,当您看到java.lang.NoSuchMethodError时,它可以表示版本之间的不兼容性。
发布于 2017-01-30 11:52:14
如果您想要访问hbase使用猪,更安全的版本将是hbase 0.98和猪0.15。我希望这将解决您的集成问题。
发布于 2018-04-17 13:26:23
当HBase社区将#setCacheBlocks()的返回值从“void”更改为“Scan”时,就破坏了二进制兼容性。它希望从setCacheBlocks() 0.98中找到HBase,但找到HBase 1.1.2的版本。
一种解决方案是重新编译Pig以使用HBase 1.1.2。
https://stackoverflow.com/questions/34533598
复制相似问题