我尝试使用 Pig(0.15.0)从 HBase(1.1.2)加载数据。我试过注册过多的JAR但没有成功。我能用Java访问它,但不能用Pig访问它。下面我已经注册了所有JAR。前五个,然后是我的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 script无法验证:java.lang.RuntimeException:无法实例化' org.apache.pig.backend.hadoop.hbase.HBaseStorage'参数' [professional:designation,-loadKey true]' 无法解析:Pig脚本无法解析: pig脚本无法验证:java.lang.RuntimeException:无法实例化' org.apache.pig.backend.hadoop.hbase.HBaseStorage'参数' [professional:designation,-loadKey true]' 在org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:199) 在org.apache.pig.PigServer $ Graph.parseQuery(PigServer.java:1735) 在org.apache.pig.PigServer $ Graph.access $ 000(PigServer.java:1443) 在org.apache.pig.PigServer.parseAndBuild(PigServer.java:387) 在org.apache.pig.PigServer.executeBatch(PigServer.java:412) 在org.apache.pig.PigServer.executeBatch(PigServer.java:398) 在org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171) 在org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:749) 在org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:376) 在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230) 在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205) 在org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81) 在org.apache.pig.Main.run(Main.java:631) 在org.apache.pig.Main.main(Main.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) 在org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在org.apache.hadoop.util.RunJar.main(RunJar.java:136) 引起: /home/halmousli/mygit/Pig/mavenpigtester/src/main/resources/hbaseGetter.pig,第21行,第7栏> pig脚本无法验证:java.lang.RuntimeException:无法实例化' org.apache.pig.backend.hadoop.hbase.HBaseStorage'参数' [professional:designation,-loadKey true]' 在org.apache.pig.parser.LogicalPlanBuilder.buildLoadOp(LogicalPlanBuilder.java:897) 在org.apache.pig.parser.LogicalPlanGenerator.load_clause(LogicalPlanGenerator.java:3568) 在org.apache.pig.parser.LogicalPlanGenerator.op_clause(LogicalPlanGenerator.java:1625) 在org.apache.pig.parser.LogicalPlanGenerator.general_statement(LogicalPlanGenerator.java:1102) 在org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:560) 在org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:421) 在org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:191) ......还有19个 引起:java.lang.RuntimeException:无法实例化' org.apache.pig.backend.hadoop.hbase.HBaseStorage'参数' [professional:designation,-loadKey true]' at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:772) 在org.apache.pig.parser.LogicalPlanBuilder.buildLoadOp(LogicalPlanBuilder.java:885) ......还有25个 引起:java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:740) ... 26更多
引起:java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V 在org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:427) 在org.apache.pig.backend.hadoop.hbase.HBaseStorage。(HBaseStorage.java:368) ......还有31个 2015-12-30 11:19:14,794 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200:Pig脚本无法解析: pig脚本无法验证:java.lang.RuntimeException:无法实例化' org.apache.pig.backend.hadoop.hbase.HBaseStorage'参数' [professional:designation,-loadKey true]' 日志文件的详细信息:/home/halmousli/hadoop-2.6.0/sbin/pig_1451492353570.log
我不知道为什么我看到的原因是:java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setCacheBlocks
。在我的Java代码中,我能够找到该函数并运行它但不在Pig中,我使用的是相同的jar。
Scan scan = new Scan();
scan.setCacheBlocks(true);
有任何建议可以解决这个问题或以其他方式从Pig访问HBase吗?感谢。
答案 0 :(得分:0)
上述错误的原因是我的hadoop版本与hbase之间不兼容。我安装了hbase-0.98.16-hadoop2,并且pig代码正在运行而没有错误。
通常,当您看到java.lang.NoSuchMethodError时,它可能表示版本之间不兼容。
答案 1 :(得分:0)
如果你想使用猪访问hbase更安全的版本将是hbase 0.98和pig 0.15。我希望这能解决您的集成问题
答案 2 :(得分:0)
HBase社区在将#setCacheBlocks()
的返回值从“void”更改为“Scan”时打破了二进制兼容性。期望从HBase 0.98中找到setCacheBlocks()
,但找到HBase 1.1.2的版本。
一种解决方案是重新编译Pig以使用HBase 1.1.2。