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

     终于配置好了完全分布式的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$HConnectionImplementa
### HBase SLF4J Failed to load class org.slf4j.impl.StaticLoggerBinder 解决方案 在运行HBase,如果出现 `SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"` 错误,这表明系统未能找到合适的日志实现绑定器。以下是详细的解决方案: #### 问题描述 当启动HBase,可能会遇到以下错误信息: ``` SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. ``` 此错误表示SLF4J未能加载具体的日志实现类,因此默认使用无操作(NOP)的日志实现[^1]。 #### 原因分析 SLF4J是一个抽象层,用于统一不同日志框架的接口。为了使SLF4J正常工作,必须提供一个具体的日志实现绑定器(如 `slf4j-nop.jar`, `slf4j-simple.jar`, `slf4j-log4j12.jar`, 或 `logback-classic.jar`)。如果没有绑定任何日志实现,SLF4J将无法正常记录日志切换到NOP模式[^4]。 #### 解决方法 以下是解决该问题的具体步骤: 1. **检查当前依赖库** 首先需要确认HBase安装目录下的 `lib` 文件夹中是否已经存在与SLF4J相关的jar包。可以执行以下命令查看: ```bash cd /path/to/hbase/lib ls | grep slf4j ``` 如果未发现任何具体的日志实现绑定器,则需要手动添加[^3]。 2. **下载合适的日志实现绑定器** 根据实际需求选择一个日志实现绑定器进行下载。以下是几种常见的选择: - **slf4j-nop.jar**: 提供无操作的日志实现,适合不需要记录日志的场景。 - **slf4j-simple.jar**: 提供简单的日志实现,适合小型应用。 - **slf4j-log4j12.jar**: 结合Log4j 1.2使用,适合已有Log4j配置的环境。 - **logback-classic.jar**: 使用Logback作为日志实现,功能更强大且推荐使用[^4]。 下载地址:[Maven Central Repository](https://search.maven.org/)。例如,下载 `slf4j-nop-1.7.36.jar`: ```bash wget https://repo1.maven.org/maven2/org/slf4j/slf4j-nop/1.7.36/slf4j-nop-1.7.36.jar ``` 3. **将绑定器添加到HBase的lib目录** 将下载的jar文件复制到HBase的 `lib` 目录下: ```bash cp slf4j-nop-1.7.36.jar /path/to/hbase/lib/ ``` 4. **重启HBase服务** 完成上述步骤后,重新启动HBase服务以验证问题是否解决: ```bash /path/to/hbase/bin/start-hbase.sh ``` #### 示例代码 以下是一个简单的日志配置示例,假设选择了 `slf4j-log4j12.jar`: ```properties # log4j.properties log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` 将上述内容保存为 `log4j.properties` 放置在HBase的配置目录下。 --- ### 注意事项 - 确保仅添加一个日志实现绑定器,避免多个绑定器冲突导致其他问题[^3]。 - 如果使用的是Logback作为日志实现,请确保同包含 `logback-classic.jar` 和其依赖的 `logback-core.jar`。 ---
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值