【发布时间】:2015-02-20 23:49:20
【问题描述】:
我们正在使用一台主服务器和一台从服务器以完全分布式模式运行 HBase 0.94.2 和 Hadoop 1.1.2。 HBase 服务器有 7 个表。
我们有一个 Hadoop 作业,它从 HBase 表中写入和读取。似乎 HBase 客户端为每个操作创建一个到区域服务器的新连接。当一项任务正在运行时,与区域服务器的连接超过 10 000 个。绝大多数都处于 TIME_WAIT 中,但这很快就会导致在同时运行多个任务时创建更多连接时出现问题。
一项任务也有 > 500 个线程,名称为“IPC Client (47) connection to /10.4.8.101:60020 from 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 等。 所有的 spring 配置都发生在 Mapper 的设置中。
【问题讨论】:
-
您的 Hadoop 作业如何读取和写入 HBase?