分析、解决java访问HBase 1.2.4时put数据卡住很久并报错:Failed to get region location

5 篇文章 0 订阅
3 篇文章 0 订阅
     终于配置好了完全分布式的HBase1.2.4的环境,zookeeper集群是独立的,即HBase没有托管ZooKeeper的集群,研究清楚了新版本的api的变化,遂写好了简单的demo代码往某张表里put数据,api很简单从略,运行时卡住,程序一直卡着不动,也没有结束,执行到put那一行就彻底卡住了,一个小时后,控制台会报错:
2017-03-29 16:01:48 ERROR org.apache.hadoop.hbase.client.AsyncProcess  - Failed to get region location 
java.io.IOException: Failed to get result within timeout, timeout=60000ms
	at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:206)
	at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60)
	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
	at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.loadCache(ClientSmallReversedScanner.java:212)
	at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.next(ClientSmallReversedScanner.java:186)
	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1275)
	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1181)
	at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:410)
	at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:359)
	at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:238)
	at org.apache.hadoop.hbase.client.BufferedMutatorImpl.flush(BufferedMutatorImpl.java:190)
	at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:1434)
	at org.apache.hadoop.hbase.client.HTable.put(HTable.java:1018)
	at test.com.rz.hbase.HBaseUtilTest.main(HBaseUtilTest.java:34)
[ERROR]:save net data error! An error occured when saving net data!the current rowKey is [[B@218a968b]
org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 1 action: IOException: 1 time, 
	at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.makeException(AsyncProcess.java:258)
	at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.access$2000(AsyncProcess.java:238)
	at org.apache.hadoop.hbase.client.AsyncProcess.waitForAllPreviousOpsAndReset(AsyncProcess.java:1817)
	at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:240)
	at org.apache.hadoop.hbase.client.BufferedMutatorImpl.flush(BufferedMutatorImpl.java:190)
	at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:1434)
	at org.apache.hadoop.hbase.client.HTable.put(HTable.java:1018)
	at test.com.rz.hbase.HBaseUtilTest.main(HBaseUtilTest.java:34)
    这个问题困扰了我很多天,我也从网上查了很多资料,综合分析,可能的原因如下:

    1. hadoop区块损坏,用相关命令检查。

    2,.zookeeper的meta数据损坏引起的问题。

    3. 某个节点不正常时,可能也会引起此问题

    4.hbase 1.0以前的版本里有一个bug会引起此问题

    5.如果代码里写错了column family的名字,也可能会引起此问题

   6. hbase 与hadoop版本不兼容也会引发此问题

   7. 完全分布式的hbase,如果没有用hadoop集群的hadoop相关的jar替换掉 hbase里对应的jar也可能会引起莫名其妙的问题

   8. 我还甚至怀疑是Hbase1.2.4的版本自身的问题

   9. 服务器防火墙的问题

  10.运行 demo程序的客户端防火墙的问题

   然而,我逐一排查,我的问题不是以上原因引起的。  

   最后这个问题终于被我成功的解决了,那么,亲,你想知道怎么解决的吗?
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
HBase是一种分布式的非关系型数据库,它基于Hadoop的HDFS文件系统进行存储,并且提供了高可靠性、高扩展性和高性能的特性。当在使用HBase,有可能会遇到一些报错信息。 对于报错信息:java.io.IOException: could not locate executable null\bin\win,这是由于系统环境变量配置不正确导致的。在Windows系统中,HBase需要依赖一些可执行文件来执行不同的操作。然而,这个错误消息告诉我们系统找不到指定位置的可执行文件。 解决这个问题,我们可以按照以下步骤操作: 1. 首先,确认你已经正确安装了HBase并且设置好了系统环境变量。确保HBase的安装目录被正确添加到 PATH 环境变量中。 2. 确保在 HBase 的 conf 目录下,有一个名为 hbase-site.xml 的配置文件。在这个文件中,你需要设置 HBase 的主要配置属性,例如 HBase 的根目录。 3. 确认 Hadoop 的 bin 目录也被正确添加到 PATH 环境变量中。这是因为HBase依赖于Hadoop的一些可执行文件。 4. 确认 Hadoop 的配置文件也存在于其 conf 目录中,并且 Hadoop 的根目录也被正确设置。 5. 最后,尝试重新启动 HBase,看看是否仍然报错。 如果以上步骤都正确进行,并且环境配置也正确,你应该能够避免这个错误。如果问题仍然存在,请仔细检查上述步骤,并确保每一步都按照正确的方式进行操作。 希望以上解答能够帮助你解决HBase链接报错的问题。如果仍然有疑问,请提供更多的详细信息,以便我们能更准确地定位问题并给出进一步的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值