在Windows上直接使用JAVA API连接Hbase0.96报的一个异常

在Windows上直接使用JAVA API连接Hbase0.96报的一个异常,这个异常在Hbase0.94的版本里是没有的,为什么?  跟你所用的底层的Hadoop有关系,如果是底层hadoop是1.x的版本,那么没有这个问题,如果是2.x的hadoop,那么需要注意了,可能会出现下面这个问题,异常如下:

Java代码 复制代码  收藏代码
  1. 2014-07-14 13:27:59,286 WARN  [org.apache.hadoop.util.NativeCodeLoader] Unable to load native-hadoop library for your platform... using builtin-java classes where applicable  
  2. 2014-07-14 13:27:59,317 ERROR [org.apache.hadoop.util.Shell] Failed to locate the winutils binary in the hadoop binary path  
  3. java.io.IOException: Could not locate executable D:\hadoop-1.2.0\bin\winutils.exe in the Hadoop binaries.  
  4.     at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)  
  5.     at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)  
  6.     at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)  
  7.     at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)  
  8.     at org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)  
  9.     at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)  
  10.     at org.apache.hadoop.hbase.zookeeper.ZKConfig.getZKQuorumServersString(ZKConfig.java:265)  
  11.     at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:159)  
  12.     at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:134)  
  13.     at org.apache.hadoop.hbase.client.ZooKeeperKeepAliveConnection.<init>(ZooKeeperKeepAliveConnection.java:43)  
  14.     at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveZooKeeperWatcher(HConnectionManager.java:1710)  
  15.     at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:82)  
  16.     at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:806)  
  17.     at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:633)  
  18.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)  
  19.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)  
  20.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)  
  21.     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)  
  22.     at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:387)  
  23.     at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:366)  
  24.     at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:247)  
  25.     at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:188)  
  26.     at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:150)  
  27.     at com.dhgate.ywhbase.test.QueryTest.main(QueryTest.java:43)  
2014-07-14 13:27:59,286 WARN  [org.apache.hadoop.util.NativeCodeLoader] Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2014-07-14 13:27:59,317 ERROR [org.apache.hadoop.util.Shell] Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable D:\hadoop-1.2.0\bin\winutils.exe in the Hadoop binaries.
	at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
	at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
	at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
	at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
	at org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)
	at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)
	at org.apache.hadoop.hbase.zookeeper.ZKConfig.getZKQuorumServersString(ZKConfig.java:265)
	at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:159)
	at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:134)
	at org.apache.hadoop.hbase.client.ZooKeeperKeepAliveConnection.<init>(ZooKeeperKeepAliveConnection.java:43)
	at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveZooKeeperWatcher(HConnectionManager.java:1710)
	at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:82)
	at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:806)
	at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:633)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:387)
	at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:366)
	at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:247)
	at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:188)
	at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:150)
	at com.dhgate.ywhbase.test.QueryTest.main(QueryTest.java:43)


从上面的异常中国就可以看出,散仙使用的底层hadoop是1.x的环境变量,故报此异常了,不过这个异常不影响数据读取,但是为了不影响美观,我们还是需要把它处理掉,解决方法如下:


(1),比较简单的解决办法,在客户端上下载一个hadoop2.2的压缩包,解压,并配置环境变量把HADOOP_HOME改成2.x的,可以在程序里,设定,也可以直接在windows上的我的电脑右击里设置。


(2),无须下载hadoop2.2的压缩包,直接在代码里,判断是否有无winutils.exe 这个windows下的可执行文件,如果没有的话,就自己创建,这样一来,就不需要改hadoop1.x的环境变量了。
代码如下:

Java代码 复制代码  收藏代码
  1. if (System.getProperty("os.name").contains("Windows")) {  
  2.             File workaround = new File(".");  
  3.             System.getProperties().put("hadoop.home.dir",workaround.getAbsolutePath());  
  4.             File dir = new File("./bin");  
  5.             if (!dir.exists()) {  
  6.                 dir.mkdirs();  
  7.             }  
  8.             File exe = new File("./bin/winutils.exe");  
  9.             if (!exe.exists()) {  
  10.                 exe.createNewFile();  
  11.             }  
  12.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值