我正在使用Table接口接口(https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html)并使用连接接口(https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Connection.html)来获取Table对象。但正如在Connection接口链接中提到的那样," 连接创建是一个重量级的操作。连接实现是线程安全的,因此客户端可以创建一次连接,并与不同的线程共享。"。
因此,如果我为所有线程创建单个连接对象(在静态块中创建此对象),那么如果存在一些网络问题并且客户端与hbase群集的连接丢失一段时间会发生什么。在此之后,Connection对象仍然可以工作吗?
答案 0 :(得分:1)
如果连接丢失并再次返回,直到某段时间( TCP超时),一切都会正常工作。
因为客户端和hbase之间建立了TCP连接。同样如文档中所述,"与服务器,元缓存,zookeeper连接等的各个连接都由从此连接获得的表和管理实例共享" ,如果我们在网络无法访问时发送数据,数据将出现在缓冲区中,客户端将尝试重新传输该段,hbase将在网络恢复时获取。
但是如果网络在某段时间内(TCP超时)无法访问,那么TCP最终放弃并将关闭套接字。对于这种情况,你必须放置一些catch块来处理这个或者需要重新启动jar。