使用Pig

时间:2015-12-30 16:48:15

标签: hbase apache-pig

我尝试使用 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吗?感谢。

3 个答案:

答案 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。

https://issues.apache.org/jira/browse/PIG-4743