我正在尝试编写一个程序来连接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,如果您有任何问题,请与我们联系。
提前致谢, 罗希特夏尔
答案 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。