HBase错误:hbase-default.xml文件似乎是旧版本的HBase(null)

时间:2013-05-11 13:14:25

标签: hadoop hbase

我正在尝试编写一个程序来连接HBase。但是当我执行以下命令时 HBaseConfiguration.create();我收到以下错误:。

“hbase-default.xml文件似乎是旧版本的HBase(null),此版本为0.92.1-cdh4.1.2。 当我深入挖掘并调试内部观察以下内容时:

    class HBaseConfiguration
        private static void checkDefaultsVersion(Configuration conf) {
            if (conf.getBoolean("hbase.defaults.for.version.skip", Boolean.FALSE))return;                                                                                                 
            String defaultsVersion = conf.get("hbase.defaults.for.version");
            String thisVersion = VersionInfo.getVersion();
            if (!thisVersion.equals(defaultsVersion)) {
                    throw new RuntimeException(
                    "hbase-default.xml file seems to be for and old version of HBase (" +
                        defaultsVersion + "), this version is " + thisVersion);
            }
        }

在我的情况下,HBase将默认版本返回为null,我不知道为什么它返回为null,因为我检查了与HBase.jar一起打包的hbase-default.xml中的相应条目,它具有正确的条目。

当我从独立程序中尝试相同的操作时,它按预期工作。

Guyz,如果您有任何问题,请与我们联系。

提前致谢, 罗希特夏尔

5 个答案:

答案 0 :(得分:2)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>hbase.defaults.for.version.skip</name>
        <value>true</value>
    </property>
</configuration>

将其添加到hbase-default.xml并将该文件放在类路径或资源倍增器中。当我从春天的hadoop环境中跑出来时,我得到了它。通过将上面的文件添加到工作罐的reosurce文件夹,我能够解决tis -

答案 1 :(得分:1)

我使用HBase1.1.1收到此错误。 我创建了一个简单的HBase客户端,它工作正常。然后我构建了一个简单的RMI服务,并且运行正常。但是当我尝试将简单的HBase查询代码放入RMI服务时,我开始在HBaseConfiguration.create()调用中收到此错误。在玩了一下之后,我发现HBaseConfiguration.create()调用如果放在main()中的安全管理器之前就可以了。如果在包含安全管理器调用的代码块之后发出调用,我会收到错误...

Configuration conf = HBaseConfiguration.create(); // This works
if(System.getSecurityManager() == null)
{
  System.setSecurityManager(new SecurityManager());
} // End if
// Configuration conf = HBaseConfiguration.create(); // This fails

如果在安全管理器块之后的main()中发生create()调用,或者在main()实例化的类中的代码中发生错误,则会出现错误。如果在我的RMI服务类中的静态{}块中调用create()(我认为在main()之前调用它),或者在安全管理器块之前的main()中调用create(),则不会收到错误。所示。

顺便说一下,为了让最小的客户端运行,我在我的类路径中包含的jar文件如下: 公地编解码器1.9.jar, 公地集合-3.2.1.jar, 公共配置-1.6.jar, 公共琅2.6.jar, 共享记录-1.2.jar, 番石榴12.0.1.jar, Hadoop的AUTH-2.5.1.jar, Hadoop的共2.5.1.jar, HBase的客户端 - 1.1.1.jar, HBase的常见-1.1.1.jar, HBase的-hadoop2-COMPAT-1.1.1.jar, HBase的-IT-1.1.1-tests.jar, HBase的 - 协议 - 1.1.1.jar, HTRACE核-3.1.0-incubating.jar, log4j的-1.2.17.jar, 网状 - 全4.0.23.Final.jar, protobuf的-Java的2.5.0.jar, SLF4J-API-1.7.7.jar, slf4j-log4j12-1.7.5.jar

答案 2 :(得分:0)

终于找到了解决这个问题的方法......

问题是hbase-default.xml未包含在您的类路径中。

我在hbase-default.xml中添加了target/test-classes(在您的情况下会有所不同),您可以在各种文件夹中添加hbase-default.xml,看看哪些适合您。

  

注意:这只是解决方法,而不是解决方案

解决方案将加载正确的罐子(我还没想到)

答案 3 :(得分:0)

有一个类似的问题,错误是

java.lang.RuntimeException: hbase-default.xml file seems to be for and old version of HBase (0.98.3-hadoop2), this version is Unknown
    at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:70)
    at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:102)
    at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:113)

在我的情况下,我在两个不同级别的类路径中有相同的jar文件集,从一个级别删除它并且工作正常。

答案 4 :(得分:0)

在我的情况下,问题是由旧的Java版本(1.5)引起的,这是服务器上的默认值。但它适用于1.7。