我们在完全分布式模式下运行HBase 0.94.2和Hadoop 1.1.2,其中包含一个主服务器和一个从服务器。 HBase服务器有7个表。
我们有一个Hadoop作业,可以从HBase表中写入和读取。看起来HBase客户端为每个操作创建了一个到区域服务器的新连接。当一个任务正在运行时,区域服务器有超过10000个连接。大多数都在TIME_WAIT中,但这很快就会导致在同时运行多个任务时创建更多连接的问题。
一项任务还有> 500个线程,其名称为" IPC客户端(47)连接到/10.4.8.101:60020,来自root"
我们确实使用HbaseSynchronizationManager.bindResource将表绑定到线程。
关于为什么会发生这种情况的任何想法都会非常有用!
感谢
更新1
我们使用spring来创建一个Configuration和HbaseTemplate,如此
<hdp:hbase-configuration id="hbaseConfiguration" properties-location="classpath:hbase.properties"/>
<bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration"/>
从这里开始将使用HbaseTemplate来执行Put等。 所有弹簧配置都发生在Mapper的设置中。
答案 0 :(得分:0)
我在Hbase jira中发现了类似问题的各种问题。它们固定在0.94.7。在我升级到0.94.x系列中的较新版本后,问题得到了解决。