【问题标题】:Apache Pig Error: java.lang.reflect.InvocationTargetExceptionApache Pig 错误:java.lang.reflect.InvocationTargetException
【发布时间】:2016-04-20 04:09:01
【问题描述】:

当我尝试将我的数据从 Apache Pig 加载或保存到除 CSV 之外的任何内容时出现错误。这是我的猪代码:

REGISTER /usr/local/Cellar/pig/0.15.0/libexec/*.jar
REGISTER /usr/local/Cellar/pig/0.15.0/libexec/lib/*.jar
REGISTER /usr/local/Cellar/hbase/1.1.2/libexec/lib/*.jar
REGISTER /usr/local/Cellar/hadoop/2.7.2/libexec/share/hadoop/common/*.jar
REGISTER /usr/local/Cellar/hadoop/2.7.2/libexec/share/hadoop/common/lib/*.jar
REGISTER /usr/local/Cellar/hadoop/2.7.2/libexec/share/hadoop/mapreduce/*.jar
REGISTER /usr/local/Cellar/hadoop/2.7.2/libexec/share/hadoop/mapreduce/lib/*.jar
REGISTER /usr/local/Cellar/pig/0.15.0/libexec/lib/piggybank.jar

--generated_data = LOAD 'tableHive' USING org.apache.hive.hcatalog.pig.HCatLoader(',') AS (level:chararray, score:INT, attraction:chararray);

generated_data = LOAD 'CSVResults/ireland.csv' USING PigStorage(',') AS (level:chararray, score:INT, attraction:chararray);
DUMP generated_data;
fiveRating = FILTER generated_data BY (float)score>4;

level6 = FILTER fiveRating BY (float)level>5;

groupedbylevel = group level6 by attraction;

countAttractions = FOREACH groupedbylevel {
    level6Attractions = CROSS level6.level;
    generate group, COUNT(level6Attractions) AS listBylevel6;
};

orderlist = ORDER countAttractions BY listBylevel6 DESC;

limitorder = LIMIT orderlist 20;

STORE limitorder into 'Level6AttractionsIreland-limited2' using PigStorage(',');

STORE countAttractions into 'hbase://Level6AttractionsIreland' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('Ireland:level Ireland:score Ireland:attraction');
STORE countAttractions INTO 'Level6AttractionsIreland' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(',');

这是来自猪日志文件的错误:

Pig Stack Trace
---------------
ERROR 2999: Unexpected internal error. java.io.IOException: java.lang.reflect.InvocationTargetException

java.lang.RuntimeException: java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.hbase.mapreduce.TableOutputFormat.setConf(TableOutputFormat.java:211)
    at org.apache.pig.backend.hadoop.hbase.HBaseStorage.getOutputFormat(HBaseStorage.java:928)
    at org.apache.pig.newplan.logical.visitor.InputOutputFileValidatorVisitor.visit(InputOutputFileValidatorVisitor.java:69)
    at org.apache.pig.newplan.logical.relational.LOStore.accept(LOStore.java:66)
    at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:64)
    at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:66)
    at org.apache.pig.newplan.DepthFirstWalker.walk(DepthFirstWalker.java:53)
    at org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52)
    at org.apache.pig.newplan.logical.relational.LogicalPlan.validate(LogicalPlan.java:212)
    at org.apache.pig.PigServer$Graph.compile(PigServer.java:1767)
    at org.apache.pig.PigServer$Graph.access$300(PigServer.java:1443)
    at org.apache.pig.PigServer.execute(PigServer.java:1356)
    at org.apache.pig.PigServer.executeBatch(PigServer.java:415)
    at org.apache.pig.PigServer.executeBatch(PigServer.java:398)
    at org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:234)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205)
    at 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)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:459)
    at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:436)
    at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:317)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:198)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:160)
    at org.apache.hadoop.hbase.mapreduce.TableOutputFormat.setConf(TableOutputFormat.java:206)
    ... 25 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:457)
    ... 30 more
Caused by: java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace
    at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:218)
    at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:481)
    at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65)
    at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:83)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:907)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:701)
    ... 35 more
Caused by: java.lang.ClassNotFoundException: org.cloudera.htrace.Trace
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 41 more
================================================================================

如您所见,我已尝试添加每个可能相关的 jar 文件,并且我还删除了除加载和存储命令之外的所有内容,以查看是否是导致它的代码,但我得到了相同的结果。我对 Pig 很陌生,如果这是一个愚蠢的错误,我深表歉意,我已经在其他地方寻找答案,但现阶段对我没有任何帮助。此外,我在本地安装了 Hadoop、HBase 和 Hive 的 Mac 上,我在终端中运行命令“pig -x local test.pig”。任何建议都会很棒,谢谢!

【问题讨论】:

  • Caused by: java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace... 这对你来说意味着什么吗?
  • 感谢您的回复,说实话,没有一个是真的。我确实在某个阶段安装了 cloudera 的 VM,我打算将其用于大学项目,但我担心卸载它以防我破坏某些东西。您认为虚拟机可能会导致问题吗?我看到了那个错误,但我认为它是由更接近错误顶部的东西引起的,如果你明白我的意思的话。
  • 这是一个虚拟机,所以你不能破坏任何东西。堆栈跟踪中错误的根本原因在底部。这就是为什么它被称为“堆栈”跟踪。错误之后的任何内容都被添加到其他内容的“顶部”。
  • 您使用的是 cloudera 还是 hortonworks 虚拟机?根据this post 中的答案,您缺少一些 HBase jar 文件。我不确定您为什么要在 Mac 上运行 Pig 代码(基于 /usr/local/Cellar)。您应该从 VM 运行代码,其中所有环境变量和路径都已正确设置。
  • 不,我根本没有使用虚拟机,我已经在 Mac 上安装了 Hadoop 等,如果我在 Mac 上使用 Cloudera 有问题,我只是打算使用它,所以我安装了它,但我没有使用它。我已经在 Mac 上安装了 pig、Hbase 和 Hadoop,并且正在使用它。对不起,如果这令人困惑!

标签: hadoop apache-pig base hcatalog


【解决方案1】:

我不确定您从哪里获取依赖项,但您的代码正在寻找一些不存在的 Cloudera 包,因此出现错误。

Caused by: java.lang.ClassNotFoundException: org.cloudera.htrace.Trace

我刚刚用brew install hbase下载了Hbase,正确的类文件是org.apache.htrace.Trace,位于/usr/local/Cellar/hbase/.../htrace-core-*.jar

所以,我建议下载最新版本的 HBase 库。

【讨论】:

  • 您好,感谢您的建议,我已经安装了 HBase 并注册了这个 jar 文件。我按照您的建议升级了 HBase,并修改了 jar,但我得到了完全相同的错误。
  • 和里面一模一样还在找Cloudera包?如果是这种情况,那么org.apache.pig.backend.hadoop.hbase.HBaseStorage 可能是问题所在...您可以尝试使用 Cloudera 快速入门 VM 看看会发生什么吗?
  • 嗨,不,我决定不使用 Cloudera VM,而且我在这个阶段对项目的了解还很远。感谢您的所有回复,但是,我想我将不得不继续使用 CSV 文件,而忘记数据库。再次感谢。
  • 您从未提及您的文件有多大或为什么您认为 Hbase 是一个好主意,但您是否尝试过使用 Pandas,例如,对数据的数据帧进行操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多