【问题标题】:hbase client scan could not initialize org.apache.hadoop.hbase.util.Classeshbase 客户端扫描无法初始化 org.apache.hadoop.hbase.util.Classes
【发布时间】:2013-11-28 03:50:02
【问题描述】:

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

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

服务器端的hbase日志:

java.lang.NoClassDefFoundError:Could not initial class org.apache.hadoop.hbase.util.Classes 在 org.apache.hadoop.hbase.client.Scan.readFields(Scan.java:590)

但没有过滤器也能正常工作。顺便说一句,过滤器不是自定义过滤器。

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

【问题讨论】:

  • @Tshepang.对不起。我已将其发布到答案中。

标签: filter hbase


【解决方案1】:

不要忘记检查 JDK 版本。例如,在 IntelliJ 数据库中,我遇到了这个问题,因为我同时安装了 JDK 15JDK 8 以及 phoenix 我使用的版本是 Java 8,所以一旦我更改了 JVM,它就可以工作了。

在 IntelliJ 中:您可以通过转到数据源和驱动程序 -> NameYourCustomDriver -> 高级(选项卡)-> VM 主路径(字段)来更改驱动程序虚拟机

请参阅此图片示例以供参考:IntelliJ example

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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})

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2021-05-28
        相关资源
        最近更新 更多