11

我正在尝试编写一个程序来连接到 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,如果您有任何问题,请告诉我。

在此先感谢,罗希特

4

5 回答 5

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

将此添加到 hbase-default.xml 并将文件放在类路径或资源文件夹中。当我从 spring hadoop 环境中运行时,我得到了它。通过将上述文件添加到作业 jar 的资源文件夹中,我能够解决 tis-

于 2013-11-25T10:33:06.337 回答
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

如果 create() 调用发生在该安全管理器块之后的 main() 中,或者发生在由 main() 实例化的类中的代码中,我会收到错误消息。如果在我的 RMI 服务类(我相信它在 main() 之前调用)的 static{} 块中调用 create(),或者在安全管理器块之前的 main() 中调用 create(),我不会收到错误,如图所示。

顺便说一句,为了让最小的客户端运行,我在类路径中包含的 jar 文件如下:commons-codec-1.9.jar、commons-collections-3.2.1.jar、commons-configuration-1.6.jar , commons-lang-2.6.jar, commons-logging-1.2.jar, guava-12.0.1.jar, hadoop-auth-2.5.1.jar, hadoop-common-2.5.1.jar, hbase-client-1.1 .1.jar、hbase-common-1.1.1.jar、hbase-hadoop2-compat-1.1.1.jar、hbase-it-1.1.1-tests.jar、hbase-protocol-1.1.1.jar、htrace -core-3.1.0-incubating.jar、log4j-1.2.17.jar、netty-all-4.0.23.Final.jar、protobuf-java-2.5.0.jar、slf4j-api-1.7.7.jar , slf4j-log4j12-1.7.5.jar

于 2015-10-14T15:01:32.900 回答
0

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

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

我添加hbase-default.xmltarget/test-classes(根据你的情况会有所不同),你可以在不同的文件夹中添加 hbase-default.xml ,看看什么对你有用。

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

解决方案将加载正确的罐子(我还没有弄清楚)

于 2014-09-18T08:56:27.893 回答
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 文件集,从一个级别删除并且工作正常。

于 2016-03-29T06:20:10.070 回答
0

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

于 2016-04-01T09:30:46.597 回答