hbase客户端扫描无法初始化org.apache.hadoop.hbase.util.Classes

时间:2013-11-28 03:50:02

标签: filter hbase

我使用hbase客户端扫描从远程hbase服务器群集获取数据。当我将Filter设置为扫描时,客户端将抛出异常:

  

org.apache.hadoop.ipc:RemoteException:IPC服务器无法读取调用参数:   无法初始化org.apache.hadoop.hbase.util.Classes。

服务器端的hbase日志:

  

java.lang.NoClassDefFoundError:无法初始化类org.apache.hadoop.hbase.util.Classes   在org.apache.hadoop.hbase.client.Scan.readFields(Scan.java:590)

但是如果没有Filter,它的效果很好。顺便说一下,过滤器不是自定义过滤器。

我的hbase版本是0.94.10,hadoop是1.2.1。我将hadoop-core.jar复制到hbase下的lib目录。

3 个答案:

答案 0 :(得分:1)

org.apache.hadoop.hbase.util.Classes将一些初始代码放入其静态块中。所以它只会被初始化一次。当它第一次初始化时,如果抛出RunTimeException,除非重新启动hbase集群,否则它将不再初始化。在初始块中,它将创建目录,如果它无法创建目录,将抛出runtimeException。

答案 1 :(得分:1)

在初始化org.apache.hadoop.hbase.util.Classes期间,如果配置的值为" hbase.local.dir"如果不存在,将抛出运行时异常,org.apache.hadoop.hbase.util.Classes将无法初始化。该运行时异常导致抛出ClassDefNotFoundException,这是最终在日志中报告的内容。

确保这些存在且可由HBase写入:

  • hbase.local.dir(默认值:$ {hbase.tmp.dir} / local)
  • hbase.tmp.dir(默认值:$ {java.io.tmpdir} / hbase - $ {user.name})

答案 2 :(得分:0)

别忘了检查 JDK 版本。例如,在 IntelliJ 数据库中,由于安装了 JDK 15 JDK 8 以及凤凰,我遇到了这个问题>我使用的版本旨在用于 Java 8 ,因此,一旦我更改了 JVM ,它就会起作用。

在IntelliJ中:您可以通过转到数据源和 Drivers-> NameYourCustomDriver-> Advanced(Tab)-> VM home path(字段)来更改Driver VM。

请参见以下图片示例以供参考:IntelliJ example