我使用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目录。
答案 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写入:
答案 2 :(得分:0)
别忘了检查 JDK 版本。例如,在 IntelliJ 数据库中,由于安装了 JDK 15 和 JDK 8 以及凤凰,我遇到了这个问题>我使用的版本旨在用于 Java 8 ,因此,一旦我更改了 JVM ,它就会起作用。
在IntelliJ中:您可以通过转到数据源和 Drivers-> NameYourCustomDriver-> Advanced(Tab)-> VM home path(字段)来更改Driver VM。
请参见以下图片示例以供参考:IntelliJ example